2016-08-04 29 views

Antwort

0

Sie müssen zuerst verstehen, was der Operator << tut. Es führt eine bitweise Verschiebung nach links durch. Lassen Sie uns das 0b Präfix für binäre Notation und 0x für hexadezimale Schreibweise annehmen:

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

Ähnlich:

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

So:

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

Durch das Hinzufügen (1 << 24) und 1, erhalten Sie die Endergebnis: 0x01010101.

Bitte beachten Sie, dass es, obwohl es sehr viel wie ein Binärwert aussieht, ist es eine hexadezimale. Wenn wir es als binär schreiben, erhalten wir:

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

Beginnen wir mit der Gesamtzahl beginnen:

Hex:  0x01010101 
Decimal: 16843009 
Binary: 1000000010000000100000001 

nun auf sie einzeln betrachten. Beginnen Sie mit 1 << 24 (aka 1 left shifted 24-mal, auch bekannt als eine binäre 1 mit 24 Nullen..):

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 offensichtlich ist, so will ich nicht gehören. Nun fügen sie alle zusammen:

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

Und dann sind wir am Anfang zurück, 16843009 in hex ist 0x01010101.

Verwandte Themen