十六进制数和逻辑运算符

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.