我了解到Microsoft的特殊后缀“i64”可用于整数常量。我想对ULONGLONG进行无符号位移操作。
我尝试过
ULONGLONG bigNum64 = 0x800000000000000i64 >> myval;
在普通C语言中,我会使用后缀“U”,例如类似的32位操作应为ULONG bigNum32 = 0x80000000U >> myval;
我不想使二进制补码符号扩展传播到高位。我想对64位const数字进行无符号位移操作。我认为我的第一个语句将进行有符号右移操作。我尝试过
0x800000000000000i64U
和0x800000000000000u64
,但是得到编译器错误。
limits.h
的语法为0xffffffffffffffffui64
,因此0x800000000000000ui64
应该可以工作。但是,这是一个较新的版本,所以在Visual Studio 2008中可能无法工作。 - anatolygU
可以是unsigned int
、unsigned long int
或unsigned long long int
。UL
可以是unsigned long int
或unsigned long long int
。请参阅 C 标准的 6.4.4.1 节(或 C++ 标准的 2.14.3 节)。鉴于此,我认为 OP 的示例没有错误或需要修改。 - Cornstalks