2016-08-04 7 views

ответ

0

Прежде всего вам нужно будет понять, что делает оператор <<. Он выполняет побитовый сдвиг влево. Давайте принять 0b префикс для двоичной системы счисления и 0x для гексадецималов:

1 << 8 = 0b100000000 = 256 = 0x100 

Аналогично:

1 << 16 = 0b10000000000000000 = 65536 = 0x10000 

Итак:

(1 << 8) + (1 << 16) = 0x10100 

Добавляя (1 << 24) и 1, вы получите Конечный результат: 0x01010101.

Обратите внимание, что, хотя он выглядит очень много, как двоичное значение, он является шестнадцатеричным. Если мы напишем его как двоичный, мы получим:

0b1000000010000000100000001 
^ ^ ^ ^
bit #24 bit #16 bit #8 bit #0 
2
1 0000 0000 0000 0000 0000 0000 Shifting 1 left by 24 places 
      1 0000 0000 0000 0000 Shifting 1 left by 16 places 
        1 0000 0000 Shifting 1 left by 8 places 
           1 
================================ 
1 0000 0001 0000 0001 0000 0001 Result after adding 

I.e. 0x01010101.

1

Давайте начнем с общим числом:

Hex:  0x01010101 
Decimal: 16843009 
Binary: 1000000010000000100000001 

Теперь посмотрим на них в индивидуальном порядке. Начните с 1 << 24 (ака 1 left shifted 24 раз, иначе двоичный 1 с 24 нулями..):

Calculation: 1 << 24 
Decimal: 16777216 
Binary: 1000000000000000000000000 
// ^25th position because 1 was shifted 24 times to the left 

Calculation: 1 << 16 
Decimal: 65536 
Binary: 0000000010000000000000000 
//   ^17th position because 1 was shifted 16 times to the left 

Calculation: 1 << 8 
Decimal: 256 
Binary: 0000000000000000100000000 
//     ^9th position because 1 was shifted 8 times to the left 

1 очевидна, поэтому я не буду включать это. Теперь добавьте их все вместе:

1000000000000000000000000 = 1 << 24 
    0000000010000000000000000 = 1 << 16 
    0000000000000000100000000 = 1 << 8 
+ 0000000000000000000000001 = 1 
    |-------|-------|-------| 
    1000000010000000100000001 = 16843009 

А потом мы вернулись на старт, 16843009 в шестнадцатеричном является 0x01010101.

Смежные вопросы