我无法找到标准中关于如何将
例如,对于GCC而言,
int
值转换为unsigned long long
的确切规范。标准中指定了各种类似的转换,例如int -> unsigned、unsigned -> int(如果为负数则UB)、unsigned long long -> int等。例如,对于GCC而言,
-1
被转换为0xffffffffffffffff
,而不是0x00000000ffffffff
。我能依赖这种行为吗?
long long
,然后转换为unsigned long long
;2)转换为unsigned
,然后转换为unsigned long long
。按照标准的字面意思,不清楚哪个优先级更高。 - user12int
到unsigned long long
的非常直接的转换。如果后者更大(通常是这样),那么在具有带符号整数值的二进制补码表示的普通计算机上,将执行符号扩展。符号扩展包括简单地复制最高位(符号位)以填充左侧。 - Cheers and hth. - Alf