Assembly language: floating point operations
2023年8月1日shl dest, cnt
Logical shift dest to the left by cnt bits
要注意,不管shift left or shift right,都要补上0。在做shl的时候可能没注意,但shr如果没补0,就跟没shift是一样的。
例子
eax=FFFF4CCD shl eax,F
FFFF4CCD(16)=
11111111111111110100110011001101
(2)=4294921421
向左shift 15次,并补15个0,得
A6668000(16)=
10100110011001101000000000000000(2)=2791735296
如果在十进制计算,[latex]4294921421 \times 2^{15} \neq 2791735296[/latex]。这是因为shift出去的15 bits要去掉。
下面用Mathematica模拟。
int64Mask = BitShiftLeft[1, 32] - 1; eax = Interpreter["HexInteger"]["FFFF4CCD"] BaseForm[eax, 2] result = BitShiftLeft[eax, 15] limitedResult = BitAnd[result, int64Mask] BaseForm[limitedResult, 16]
Out[]= 4294921421 Out[]//BaseForm= 11111111111111110100110011001101(2) Out[]= 140735985123328 Out[]= 2791735296 Out[]//BaseForm= a6668000(16)
ChatGPT with Code Interpreter也可以算出正确的结果。ChatGPT本身不行,因为这个任务有很多算术运算,神经网络做算术运算的结果是不确定的。但是ChatGPT with Code Interpreter会把算术过程写成Python,Code Interpreter运行该Python代码,这样神经网络结合确定性算法,就能得出正确答案。