Когато чета или пиша C код, често срещам затруднения при превода на числата от двоично в шестнадесетично представяне и обратно. Обикновено различни маски като 0xAAAA5555
се използват много често в програмирането на ниско ниво, но е трудно да се разпознае специален модел от битове, които те представляват. Има ли някакво лесно запомнящо се правило как да го направим бързо на ум?
C - Бързо преобразуване между двоично и шестнадесетично представяне
Отговори (3)
Всяка шестнадесетична цифра се преобразува точно на 4 бита, обикновено имам предвид 8421 тегла на всеки от тези битове, така че е много лесно да се направи дори преобразуване в ума, т.е.
A = 10 = 8+2 = 1010 ... 5 = 4+1 = 0101
просто имайте предвид тежестите 8-4-2-1.
A 5
8+4+2+1 8+4+2+1
1 0 1 0 0 1 0 1
Винаги намирам лесно да съпоставя HEX към BINARY числа. Тъй като всяка шестнадесетична цифра може директно да бъде съпоставена с четирицифрено двоично число, можете да помислите за:
> 0xA4
As
> b 1010 0100
> ---- ---- (4 binary digits for each part)
> A 4
Преобразуването се изчислява чрез разделяне на представянето с основа 10 на 2 и нанизване на остатъците в обратен ред. Правя това наум, изглежда работи.
Така че вие кажете как изглежда 0xAAAA5555
Просто определям как изглежда А и 5 като правя
A = 10
10 / 2 = 5 r 0
5 / 2 = 2 r 1
2 / 2 = 1 r 0
1 / 2 = 0 r 1
така че знам, че А изглеждат като 1010
(Имайте предвид, че 4 пръста са добър начин да запомните остатъците!)
Можете да нанизвате блокове от 4 бита заедно, така че A A е 1010 1010. За да преобразувам двоичен обратно в шестнадесетичен, винаги минавам през основа 10 отново, като сумирам степените на 2. Можете да направите това, като формирате блокове от 4 бита (запълване с 0s) и нанижете резултатите.
така че 111011101
е 0001 1101 1101
, което е (1) (1 + 4 + 8) (1 + 4 + 8) = 1 13 13
, което е 1DD