14

Вы можете преобразовать десятичную в двоичную и двоичную в десятичную. Но как вы можете изобразить число "256"?

255 = 11111111

1 байт не может иметь более 8 двоичных цифр (бит). Как это возможно?

5 ответов5

39

Вы спрашиваете, как представить 256 в двоичном формате, но я предполагаю, что вам интересно, почему люди говорят, что байты могут хранить 256 различных чисел, когда наибольшее число, которое оно хранит, составляет 255. Как сказал Клавдиоп, компьютеры начинают считать с 0, поэтому 0 - это фактически первое число, 1 - второе, 2 - третье ... 255 - 256-е.

Кроме того, 11111111 только 255 для неподписанных байтов. Если у вас есть подписанный байт (значение со знаком может содержать отрицательные значения), 11111111 фактически равен -1. Смотрите http://en.wikipedia.org/wiki/Two's_complement. Способ, которым дополняют два, добавляет отрицательное число к положительному числу, что приводит к 0. Как говорили другие люди, если мы добавим бит к 11111111, и ваш тип данных может поддерживать только 8 бит, последний бит переполнится и у вас останется 0. Для байтов со знаком значения варьируются от -128 до 127. 128 отрицательных чисел + 0 + 127 положительных чисел = всего 256 чисел.

Для знаковых значений первый бит является битом "знак". Если этот бит установлен, число является отрицательным. 10000000 отрицательно, 01000000 положительно, 11111111 отрицательно, 01111111 положительно ...

Если вы работаете в Windows (возможно, у Mac тоже есть), вы можете открыть калькулятор, переключить его в режим программирования, выбрать sbyte и поиграть с битами, чтобы увидеть, как они соотносятся с их десятичными представлениями.

Windows Calculator показывает 256 в десятичном и двоичном виде

12

Ну, вам нужно 2 байта, чтобы представить это. 256 = 00000001 00000000

11

Как вы уже знаете, 255d (десятичный) равен 11111111b (двоичный). Если вы хотите добавить 1 к значению, есть две возможности:

Либо у вас есть только 8 бит. В этом случае происходит так называемое переполнение . Таким образом, "внутренне", 1 будет добавлен, что приведет к 100000000b (256d в 9 битах). Но поскольку у вас есть только 8 доступных битов, младшие 8 бит будут "возвращены". Таким образом, вы получите 0d = 0b (специальный флаг переполнения будет установлен на большинстве компьютерных архитектур, как примечание).

Думайте об этом так же, как считать пальцами. Представьте, что ваши пальцы показывают 9d. Теперь вы добавляете еще один палец. Вы в конечном итоге с 10. Что вы делаете, если хотите добавить еще один?

Другая возможность состоит в том, что у вас доступно более 8 бит. В этом случае вы можете просто добавить еще одну цифру в начало, и результат будет действительно 100000000b = 256d.

Байт - это наименьшее "устройство", которое может адресовать компьютерная система (система памяти). Это означает, что если вы хотите знать только один бит, вы должны попросить систему памяти выдать вам определенный байт с адреса, а затем вам нужно выяснить значение бита, который вас интересует.

Но так же, как 8 бит составляют байт, существуют и большие типы данных. 2 байта составляют слово (16 бит), два слова (четыре байта, 32 бита) составляют двойное слово. А в настоящее время стандартные 64-битные архитектуры даже имеют 64-битные типы данных (так называемые регистры).

5

Это 100000000, и ему нужно более одного байта. На самом деле это нужно 9 бит.

0

Вы можете представить его с помощью сдвига битой операции (влево или вправо в зависимости от байт в двоичном представлении). Например, этот один вкладыш работает для представления с прямым порядком байтов (сначала старший байт):

1 << 8

Байт без знака может содержать только 256 значений, которые включают диапазон [0 - 255]. Для значения 256 вам нужно будет использовать тип данных, который может содержать большее значение, например, целое число.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .