关于负数的按位取反操作符

在我认为打印(int)~(-1)的计算过程如下时:

按位取反:0111 1111 1111 1111 1111 1111 1111 1110

由补码还原成反码(-1):0111 1111 1111 1111 1111 1111 1111 1101

反码还原成原码:0000 0000 0000 0000 0000 0000 0000 0010

得出结果2时我还觉得的我对知识掌握的很深刻

自信的按下ctrl+f5后:

妈妈生的!

然后开始寻求真理,但是找了很久都没有找到按位求反的详细运算过程,都是~的计算公式,并举例都是验证公式的正确性,

当百思不得其解时,突然想到我好像忽略了当计算~(-1)时存在内存中的并不是1000 0001 !!

而是其补码1111 1111(反码1111 1110+1),所以计算出的应该是补码0000 0000,最高位为0,表示正数(不是负数,因为是补码中的最高位),正数原码=补码=反码,所以输出的是0!

虽然只是很小的一个知识,也只是因为我没有记清楚概念闹出的乌龙,但自己想通的感觉很棒!

今晚能睡着啦!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值