该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
首先得说明一下,我的编辑器是VC++,操作系统是Win2000,32位平台
printf("%d",42);
scanf("%c");
运行看到显示 42
修改程序为:
pintf("%d",2147483647);
scanf("%c");
运行看到显示 2147483647
修改程序为:
printf("%d",2147483648);
scanf("%c");
运行看到显示 -2147483648
修改程序为:
printf("%d\r\n",4294967295);
printf("%d\r\n",4294967296);
printf("%d\r\n",4294967297);
运行看到显示:
-1
0
1
说明: \r和\n是两个特殊字符,\r是回车符,\n是换行符
为什么printf("%d",2147483648); 会显示 -2147483648
是编译器出了问题吗?不是的,按道理来说,对于这种数字,
系统用32位二进制来存储它,最高位是符号位,表示是正还是
负,最高位为0表示正数,最高位为1表示负数,
大家可以算算,2的31次方是多少,结果就是2147483648
当数字是2147483648时,二进制是:
10000000 00000000 00000000 00000000
很显然,最高位已经是1了,所以变成了负数,
那 printf("%d\r\n",4294967296); 为什么显示0呢?
因为4294967296就是2的32次方,二进制表示为:
1 00000000 00000000 00000000 00000000
已经占了33位二进制,
而数字还是用32位来表示,虽然有33位,但只保留了32位,
第33位丢失了,所以变成:
00000000 00000000 00000000 00000000
同样,更大的数字也是这样,比32位高的
位全部丢失了,
当数字多于64位时提示: 常数太大,VC++对数字只支持到64位二进制