GJ.*_*GJ. 6 delphi 64-bit bit-shift
宣言...
const
n = 2 shl 33
Run Code Online (Sandbox Code Playgroud)
n
在没有编译器投诉的情况下将常数设置为值4!
也...
Caption := IntToStr(2 shl 33);
Run Code Online (Sandbox Code Playgroud)
...返回4而不是8589934592.看起来编译器计算如下:
2 shl 33 = 2 shl(33和$ 1F)= 4
但没有任何警告或溢出.
如果我们声明:
const
n: int64 = 2 shl 33;
Run Code Online (Sandbox Code Playgroud)
常数中的数字仍然是4而不是8589934592.
任何合理的工作?
Ken*_*ite 13
根据Delphi编译器和Windows 7程序员模式的计算器,你正在寻找错误的结果.(你想要的答案实际上就是2 shl 32
BTW.)
你需要将两侧投射shl
到Int64
:
const
n = Int64(2) shl Int64(33);
Run Code Online (Sandbox Code Playgroud)
这产生了
N = 17179869184;
Run Code Online (Sandbox Code Playgroud)
当前的文档(对于XE2,但也适用于早期版本的Delphi)注意到了这一点Fundamental Integer Types
.但是,该页面提到只需要将其中一个操作数转换为Int64
; 我的测试表明它要求两个操作数在const
上面的声明中进行类型转换- 仅对一个(无论哪一个)进行类型转换也导致"n = 4;".
归档时间: |
|
查看次数: |
1356 次 |
最近记录: |