像32i64这样的操作数是什么意思?

wal*_*ruz 5 c++ 32bit-64bit visual-c++

请帮我理解这个表达方式:

(dwStreamSizeMax >> 32i64)
Run Code Online (Sandbox Code Playgroud)

我以前从未见过像32i64这样的操作数.谢谢.

Rom*_* R. 6

从MSDN C++整数常量:

64位整数后缀:i64 LL ll

也就是说,32i64将是64位大小的整数类型常量,值为32.也就是说,它是(__int64) 32,或(int64_t) 32.

dwStreamSizeMax >> 32i64

请注意,在引用的表达式中,即使对于64位dwStreamSizeMax最大移位,有意义的位数也是63,它适合8位值(BYTE),因此64位大小说明符存在冗余.

  • 有人告诉 Richter 先生,他的代码有未定义的行为 (2认同)
  • 看起来它是第 5 版中修复的旧版本代码。在较旧的代码中,`dwStreamSizeMax` 是一个 `SIZE_T`(因此它在 Win64 系统上是 64 位类型)并且表达式试图获得高 32 位。这适用于 64 位系统,但在 32 位系统上仍然是未定义的行为。在第 5 版中,大小信息作为两个单独的高/低 DWORD 传递。 (2认同)