Двоичный эквивалент десятичного числа 104 - PullRequest
2 голосов
/ 13 ноября 2011

Хорошо, я знаю, что двоичный эквивалент 104 равен 1101000.

10 = 1010

4 = 0100

, так что 104 = 1101000 (как получитьэто, как они оба смешиваются и получают этот двоичный файл?)

И из примера здесь ...

октеты из "hellohello" являются E8 32 9BFD 46 97 D9 EC 37.

This bit is inserted to the left which yields 1 + 1101000 = 11101000 ("E8").

Я все еще понимаю эту часть, но как преобразовать 11101000 в E8?

Мне очень жаль все этиnoob вопросы, я только учу это вчера, я гуглил и ищу целый день, но все еще не очень понимаю концепцию ...

Спасибо.

Ответы [ 4 ]

5 голосов
/ 13 ноября 2011

Хорошо, я знаю, что двоичный эквивалент 104 равен 1101000.

10 = 1010
4 = 0100

Вы не можете разбить на частичисло типа 104 в 10 и 4 при смене баз .Вам нужно взглянуть на число 104 во всей полноте.Начните с таблицы битовых позиций и их десятичных эквивалентов:

1            1
2           10
4          100
8         1000
16       10000
32      100000
64     1000000
128   10000000

Найдите наибольшее десятичное число, которое все еще меньше вашего input числа: 104 - это 64.Запишите это:

1000000

Вычтите 64 из 104: 104-64=40.Повторите поиск в таблице с помощью 40 (в данном случае 32) и запишите соответствующий битовый шаблон ниже первого - выравнивая младший бит в крайнем правом углу:

1000000
 100000

Повторитес 40-32=8:

1000000
 100000
   1000

Поскольку после 8 ничего не осталось, вы закончили.Суммируйте эти три числа:

1101000

Это двоичное представление 104.

Чтобы преобразовать 1101000 в шестнадцатеричное, мы можем использовать небольшой трюк, очень похожий на вашу попытку использовать10 и 4, чтобы построить шестнадцатеричную версию из двоичной версии без особой работы - посмотрите на группы по четыре бита за раз.Этот прием работает потому, что четыре бита базового 2 представления полностью представляют диапазон вариантов базовых 16 представлений:

Bin  Dec  Hex
0000 0    0
0001 1    1
0010 2    2
0011 3    3
0100 4    4
0101 5    5
0110 6    6
0111 7    7
1000 8    8
1001 9    9
1010 10   A
1011 11   B
1100 12   C
1101 13   D
1110 14   E
1111 15   F

Первая группа из четырех битов (достаточно вставитьведение 0 для заполнения его четырьмя битами) 0110 - это 6 десятичное число, 6 шестнадцатеричное;вторая группа из четырех битов, 1000 является 8 десятичным, 8 шестнадцатеричным, поэтому 0x68 является шестнадцатеричным представлением 104.

2 голосов
/ 13 ноября 2011

Здесь вам не хватает общей формулы для цифровых номеров.

104 = 1*10^2 + 0*10^1 + 4*10^0

Аналогично,

0100b = 0*2^3 + 1*2^2 + 0*2^1 + 0*0^0

А для шестнадцатеричного числа буквы A-F обозначают числа 10-15. Таким образом,

E8 = 14*16^1 + 8*16^0

Когда вы идете справа налево, каждая цифра представляет коэффициент следующей более высокой степени основания (также называемой основанием).

В программировании, если у вас есть целочисленное значение (во внутреннем формате компьютера, возможно, двоичное, но оно не имеет значения), вы можете извлечь самую правую цифру с помощью операции модуля.

x = 104
x % 10 #yields 4, the "ones" place

И тогда вы можете получить «все, кроме» самой правой цифры с целочисленным делением (целочисленное деление отбрасывает остаток, который нам больше не нужен).

x = x / 10 #yields 10
x % 10 #now yields 0, the "tens" place
x = x / 10 #yields 1
x % 10 #now yields 1, the "hundreds" place

Так что, если вы выполняете деление модуля и целочисленного значения в цикле (останавливаясь при x == 0), вы можете вывести число в любой базе.

2 голосов
/ 13 ноября 2011

Я думаю, что вы путаете: десятичное число 104 - это 1101000, которое не образовано двумя группами, разбивающими 104 на 10 и 4. Исключение составляют шестнадцатеричные числа, которые могут быть образованы двумя группами 4 двоичными числами (2 ^ 4 =16).

Таким образом, 111010000 = E8 переводится в 1110 = E и 8 = 10000. 1110 (двоичный) будет 14 (десятичный) и эквивалентен E (шестнадцатеричный).Шестнадцатеричные числа идут от 0 до 15 (десятичное число), где:

  • 10 (десятичное число) = A (шестнадцатеричное)
  • 11 (десятичное число) = B (шестнадцатеричное)
  • ...
  • 15 (десятичный) = F (шестнадцатеричный)
0 голосов
/ 13 ноября 2011

Это базовая арифметика.См. двоичная система счисления & radix записи в википедии.

...