C/C++を使用していると思います
&num
integer のメモリ内のアドレスを取得しますnum
。
char
キャストにより、
そのアドレスを a へのポインターとして解釈します。(char *)
- 次に、char へのこのポインタの値が最初のアスタリスクによって考慮され、1
*(char *)&num
と比較されます。
現在int
は 4 バイトです。これは00 00 00 01
、ビッグ エンディアン システムとリトル エンディアン システム01 00 00 00
上にあります。char は 1 バイトしかないため、char へのキャストの値は、によって占有されているメモリの最初のバイトになりますnum
。したがって、ビッグ エンディアン システムではこれは になり**00** 00 00 01
、リトル エンディアン システムでは になります**01** 00 00 00
。ここで、if ステートメントを使用して比較を行い、char にキャストされた int がリトル エンディアン システムで使用されるバイトの順序と等しいかどうかを調べます。
X86 32 ビット システムでは、これは次のアセンブリにコンパイルできます。
mov [esp+20h+var_4], 1 ; Moves the value of 1 to a memory address
lea eax, [esp+20h+var_4] ; Loads that memory address to eax register
mov al, [eax] ; Takes the first byte of the value pointed to by the eax register and move that to register al (al is 1 byte)
cmp al, 1 ; compares that one byte of register al to the value of 1