Что такое байт и как он связан с бинарным? - PullRequest
8 голосов
/ 18 ноября 2011

Я только учусь о двоичном и байтовом. Я понимаю, что 8 бит составляют байт и что у байта может быть 256 возможностей. Вот что меня смущает:

byte[] b = new byte[] { 85, 85, 67, 75 };

Что 85 или любое из вышеприведенных чисел связано с двоичным. Просто что-то не до конца щелкает у меня в голове.

Ответы [ 6 ]

12 голосов
/ 18 ноября 2011

Бинарный - это то, как вещи хранятся внутри компьютера.Единицы и нули, включенные и выключенные, истинные и ложные, наличие или отсутствие электрического тока. Эта статья в Википедии дает довольно тщательную обработку.

Представление типа "85" в вашем примере показывает, как байт отформатирован для нашего удобства читателей-людей.Он может быть отформатирован в шестнадцатеричном (основание 16) как "55", в восьмеричном (основание 8) как "125" в двоичном виде как "1010101", или даже как "11" в base-84, если вы были склонны.Все означают одно и то же.

4 голосов
/ 18 ноября 2011

85 - это просто десятичное число (т. Е. «Основание 10») позиционная запись числа. Это значит:

8 * 10 ^ 1 + 5 * 10 ^ 0

= 8 * 10 + 5 * 1

= 80 + 5

= 85

Однако вы можете выбрать любую базу для представления чисел. У нас, людей, есть 10 пальцев, что является вероятным источником системы «10 основ» в повседневном использовании, но нет никакого способа представить 10 различных цифр в физической схеме компьютера. Эта схема понимает только отсутствие электронов по сравнению с наличием электронов, то есть только две цифры, следовательно, двоичную систему.

Итак, хотя вы можете написать десятичное число 85 в исходном коде вашей программы (чтобы оно было более естественным для людей), в конечном итоге оно представляется в компьютере как двоичный код 1010101, что равно ...

1 * 2 ^ 6 + 0 * 2 ^ 5 + 1 * 2 ^ 4 + 0 * 2 ^ 3 + 1 * 2 ^ 2 + 0 * 2 ^ 1 + 1 * 2 ^ 0

= 1 * 64 + 0 * 32 + 1 * 16 + 0 * 8 + 1 * 4 + 0 * 2 + 1 * 1

= 64 + 16 + 4 + 1

= 85


Кстати, десятичная система не "выравнивается" с двоичными числами - ни одна десятичная цифра не может быть представлена ​​"целым" числом двоичных цифр, а круглые десятичные числа не очень хорошо соответствуют круглым двоичным числам. Например:

  • 10 (десятичный) = 1010 (двоичный)
  • 100 (десятичный) = 1100100 (двоичный)
  • 1000 (десятичный) = 1111101000 (двоичный)
  • и т.д ...

Иногда удобно использовать числовую систему, которая «выравнивается» по двоичному типу, например восьмеричное (одна восьмеричная цифра - ровно 3 двоичные цифры) или шестнадцатеричное (одно шестнадцатеричная цифра - это ровно 4 двоичные цифры).

Важным моментом является то, что все эти системы в конечном итоге представляются в виде двоичного файла в компьютере.

На дополнительном примечании: "шестнадцатеричный" имел обыкновение быть " sexa -десятичным", но, очевидно, оскорблял некоторые пуританские чувства;)

3 голосов
/ 18 ноября 2011

Этот оператор объявляет массив байтов и присваивает ему 4 элемента - каждый из которых имеет размер одного байта (теоретически!). Фактические значения - 85, 86, 67, 75 - хранящиеся в этом массиве, представляют собой каждое значение, которое может помещаться в один байт. В вашем примере кода эти значения представлены в десятичной форме. Как только ваш код переведен в исполняемую форму, эти значения в конечном итоге будут видны вашему компьютеру в их двоичных представлениях, перенесены из регистра в регистр, отправлены, вытолкнуты, накоплены и т. Д.

Вы могли бы представлять значения в других базах внутри вашего источника - например, в шестнадцатеричном или базовом 16, который ближе к металлу, чем десятичный, и, соответственно, позволяет вашему мыслительному процессу легко перемещаться между человеческим представлением. и что на самом деле говорит ваш код, поскольку фактически нет никакой математической мысли, чтобы мысленно переходить между шестнадцатеричным и двоичным; Еще один хороший пример - восьмеричное.

Или вы можете думать об этом так: представлять значения в вашем коде, используя базу, которая наилучшим образом относится к тому, что вы делаете. Если вы используете ИЛИ вместе разрешения или значения цвета, шестнадцатеричные или восьмеричные; если вы начисляете проценты по текущему счету, тогда очевидный выбор - десятичный.

Теперь, для вашего конкретного фрагмента кода - если вы имеете дело с отдельными символами или записываете сырые вещи на блочное устройство, массив байтов может быть просто прекрасен - однако, когда вы станете единым целым с вашим компилятором, ваш мозг может в конце концов рассмотрим шестнадцатеричное представление, более простое в обращении.

3 голосов
/ 18 ноября 2011

Это просто цифры.Они не имеют ничего общего с бинарным.Вы можете записать их в двоичном виде, хотя, если вы так выбрали - например, 75 = 01001011 в базе 2.

A byte здесь, то это просто тип данных, который может содержать один из 256 возможныхценности.Обычно это интерпретируется как число от 0 до 255 или 8 двоичных цифр (т.е. 8 значений ВКЛ / ВЫКЛ).Это всего лишь два взгляда на одно и то же.

3 голосов
/ 18 ноября 2011

A byte в C # - это просто 8-битное целочисленное значение.Выше вы представляете 4 числа в массиве - это на самом деле ничем не отличается от того, что было бы, если бы вы использовали int, за исключением того, что числа занимают 1/4 от общего пространства в памяти.

Этона самом деле не имеет ничего общего с «двоичным» - кроме самого распространенного представления, используемого для двоичных данных.Это связано с тем, что большинство систем используют один «байт» за раз, который представляет собой 8-битный блок данных.Таким образом, байт является обычным способом представления этих данных, если вы делаете что-то, что работает с необработанной двоичной информацией.

Класс BitConverter имеет процедуры для перехода от байтовых массивов к другимТипы и обратно.Например, он может взять 4 байта и превратить его в значение Int32 или наоборот.Помните - все данные хранятся только в памяти - вы просто сохраняете последовательность битов (1 и 0) в определенном порядке, и система интерпретирует эти данные определенным образом.

0 голосов
/ 18 ноября 2011

Каждое из чисел в массиве меньше 256. Они преобразуются в байт в двоичном виде. Это просто их десятичное представление.

...