c语言加法 -858993459,C语言入门

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

首先得说明一下,我的编辑器是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位二进制

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值