main() { int a=-3; a=~a; printf("%d\n",a); } 这不是一个取反运算吗?为什么a输出是2呢?

[复制链接]
查看11 | 回复3 | 2011-12-9 09:54:31 | 显示全部楼层 |阅读模式
取反的意思,把十进制数转成二进制数,然后按位取反,然后输出十进制。原码:1000 0000 0000 0011 -3;补码:1111 1111 1111 1101-3;取反:0000 0000 000000102;计算机里存负数是用补码表示的,取反是反补码取返,如上所示,补码取反,连符号位一起变反,成了2;...
回复

使用道具 举报

千问 | 2011-12-9 09:54:31 | 显示全部楼层
计算机的CPU是只认二进制的,所以计算机位操作也是要现转化为二进制的,具体转化如下:-3的原码:10000011然后转化为补码:11111101 再按位取反为:00000010即为2的二进制代码,再按十进制输出时自然就是2了!...
回复

使用道具 举报

千问 | 2011-12-9 09:54:31 | 显示全部楼层
这个得理解-3是怎么在计算机中存储的。负数的补码=对应正数补码取反+1-3对应的正数是3,3在计算机中的存储是0011,取反就是1100,再加1得到3的补码,也就是1101然后程序执行这句话a=~a;所以a现在就是0010,打印出来就是2了...
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行