十六进制数和逻辑运算符
Hexadecimal numbers and logic operators
要解决的问题:
Write hexadecimal value of 32-bit variable i
(type Longint) after
executing code in Pascal. Code will translate for little-endian
platform. i:=-20; i:=($FFFF xor (i shr 2)) and not( shl 16);
我需要知道的:括号 (i shr 2
) 和 ( shl 16
).
中发生了什么
我的想法:十六进制的 i (-20):FFEC(但也许感谢 little-endian,它是 CEFF)。
($50 shl 16) - 我认为因为 $50 只有 8 位,所以 shl 16 只会使它为零。还是会变成 $500000?
i shr 2
= i 右移2位,大致就是i = i / 4
shl 16
= 向左移动 50 美元 16 个位置,这是在寄存器中完成的(参见 here)
[=10=]00 0050 -> [=10=]50 0000
现在开始计算 i
:
32位值的-20:
$ffff ffec
-20 的 SHR 2:(在寄存器中完成)
ffff ffec -> 3fff fffb
然后异或(在寄存器中完成)
0000 ffff
3fff fffb
----------
3fff 0004
然后$0050 0000的NOT:(逻辑非=位补,非2补)
0050 0000 -> ffaf ffff
最后是 AND:(在寄存器中)
3fff 0004
ffaf ffff
--------
3faf 0004
这是 'i' 的值,用于任何基于寄存器的计算。
小字节序只对内存存储有影响,
其中 i
存储为 0400 af3f.
要解决的问题:
Write hexadecimal value of 32-bit variable
i
(type Longint) after executing code in Pascal. Code will translate for little-endian platform.i:=-20; i:=($FFFF xor (i shr 2)) and not( shl 16);
我需要知道的:括号 (i shr 2
) 和 ( shl 16
).
我的想法:十六进制的 i (-20):FFEC(但也许感谢 little-endian,它是 CEFF)。 ($50 shl 16) - 我认为因为 $50 只有 8 位,所以 shl 16 只会使它为零。还是会变成 $500000?
i shr 2
= i 右移2位,大致就是i = i / 4
shl 16
= 向左移动 50 美元 16 个位置,这是在寄存器中完成的(参见 here)
[=10=]00 0050 -> [=10=]50 0000
现在开始计算 i
:
32位值的-20:
$ffff ffec
-20 的 SHR 2:(在寄存器中完成)
ffff ffec -> 3fff fffb
然后异或(在寄存器中完成)
0000 ffff
3fff fffb
----------
3fff 0004
然后$0050 0000的NOT:(逻辑非=位补,非2补)
0050 0000 -> ffaf ffff
最后是 AND:(在寄存器中)
3fff 0004
ffaf ffff
--------
3faf 0004
这是 'i' 的值,用于任何基于寄存器的计算。
小字节序只对内存存储有影响,
其中 i
存储为 0400 af3f.