取反操作

u010017416 2013-03-25 03:12:25
int a = 13;
int z = ~a;

~a为什么会是14?

13: 0000 1101 = 8+4+1 =13
~a 1111 0010 = ?? ,为什么会是-14? 如何计算的??麻烦大大们给出详细介绍,万分感激。
...全文
482 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
mujiok2003 2013-03-25
  • 打赏
  • 举报
回复
记住:任何整数a,都有a + ~a + 1 = 0; 所以~a = -1-a=-1-13=-14 ~(-44)= -1-(-44)= 43
hunter0395 2013-03-25
  • 打赏
  • 举报
回复
在计算机系统中数用补码表示。 正数的补码就是原码。 负数的原码为其绝对值的原码最高位(符号位)变为1,负数的补码为原码符号位不变,其余位取反,然后整个数加1. 如果你的系统int为1个字节。那么 a=13=00001101 z=~a=11110010 将11110010按照8位有符号数解释, 先确定正负,符号位为1,是负数。 整个数减1,等于11110001, 再符号位不变,其余位取反,等于10001110,即该数绝对值为14, 所以该数为-14.
u010017416 2013-03-25
  • 打赏
  • 举报
回复
z = (11110010) 哥们,下面几个还是不太懂,能不能再详细点 z = -(~(11110010) + 1) z = -(00001101 + 1) z = -(00001110) z = -14
图灵狗 2013-03-25
  • 打赏
  • 举报
回复
为了便于问题描述,这里假设int是8位的,括号()中为二进制表示。 int a = 13; int z = ~a; a = 13 (00001101) z = ~a (11110010) //~的意思是按位取反 这样 z = (11110010) 从有符号的角度来看,z的最高位为1,所以首先可以判断它是负数,然后它的数值等于取反加一,因此: z = (11110010) z = -(~(11110010) + 1) z = -(00001101 + 1) z = -(00001110) z = -14
未注销 2013-03-25
  • 打赏
  • 举报
回复
a: 00000000 00000000 00000000 00001101 取反后 00000000 00000000 00000000 11110010 1表示负号了,在计算机中以补码存在,符号位不变,其他取反加1 变成00000000 00000000 00000000 10001110
mujiok2003 2013-03-25
  • 打赏
  • 举报
回复
0xf2就是-14
gfchen1989 2013-03-25
  • 打赏
  • 举报
回复
负数是以补码形式保存的,所以要把转换成原码,补码= 原码取反+1;后面你自己计算吧
tofu_ 2013-03-25
  • 打赏
  • 举报
回复
设有一个有符号整数n,从bit的角度来看,n + (~n)结果为全1,而全1表示-1,因此~n = (-1) - n。

64,637

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧