c语言中对变量做强制定义的主要理由,C语言中对变量定义理解的重要性。

今天在刷C语言题的过程中遇到了一下这个问题,觉得很有趣。和大家分享一下!int i=65536;printf("%d\n",i);

我想大部分人都S认为这个程序执行完了后结果是65536,的确我在VS2015编译器下编译出来的结果也是65536.但是我在C语言深度剖析这本书里面却不是这个答案。我看到的确实“0”这个答案。原因是这样的。

我们众所周知计算机的内部整数以二进制补码表示。变量i占用两个字节(16位计算机),其表示范围为-32768—32767,无法正确的表示65536.但65536=32767+32767+2,计算机内部以二进制补码相加:

0 1 1 1 1 1 1 1  1 1 1 1 1 1 1 1

+  0 1 1 1 1 1 1 1  1 1 1 1 1 1 1 1

1 1 1 1 1 1 1 1  1 1 1 1 1 1 1 0

+  0 0 0 0 0 0 0 0  0 0 0 0 0 0 0 0

1 0 0 0 0 0 0 0 0  0 0 0 0 0 0 0 0

最后结果为  00000000 00000000,对应的原码为0;

虽然在现在的电脑中32位是比较常见的,但是我想应届生招聘考试中有些变态的HR也会出点这样的问题,学会这个不仅是让我们更好的面试,更多的是养成一种对各种变量定义良好的习惯。

谢谢大家,希望可以提出意见。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值