我发现 LONG_MAX (9223372036854775807) 实际上保存在 64 位机器的 long 类型变量上,如下所示。
Hex: 0xffff ffff ffff ffff ffff ffff ffff ffff
Bin: 11111111 11111111 11111111 11111111 11111111 11111111 11111111 11111111
Run Code Online (Sandbox Code Playgroud)
据我所知,最高有效位用作有符号位。
Windows 计算器中的 9223372036854775807 更改如下。
Hex: 0x7fff ffff ffff ffff ffff ffff ffff ffff
Bin: 01111111 11111111 11111111 11111111 11111111 11111111 11111111 11111111
Run Code Online (Sandbox Code Playgroud)
所以,恕我直言,LONG_MAX 应该保存如下
Hex: 0x7fff ffff ffff ffff ffff ffff ffff ffff
Bin: 01111111 11111111 11111111 11111111 11111111 11111111 11111111 11111111
Run Code Online (Sandbox Code Playgroud)
long 变量是否被视为无符号值?
我注意到有人问我是如何发现这种情况的。
我在下面的代码中发现了这种情况。
#include <stdio.h>
#include <limits.h>
int main(int argc, …Run Code Online (Sandbox Code Playgroud)