A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

© 325122062q 中级黑马   /  2015-7-10 20:53  /  7617 人查看  /  30 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

5黑马币
为什么~20  输出是-21  请大神们告诉我一下 谢谢了

30 个回复

正序浏览
位运算,按位取反
回复 使用道具 举报
赞一个,加油.
回复 使用道具 举报
都是大神啊   在这里谢谢了
回复 使用道具 举报
都可以咯
回复 使用道具 举报
~是反码运算符20的二进制为  0000 0000 0001 0100
       取反后为  1111 1111 1110 1011
而-21的二进制表示为21的二进制取反加1,即
20      0000 0000 0001 0101
取反   1111 1111 1110 1010
+1      1111 1111 1110 1011
可以看出~20=-21





捕获.JPG (76.75 KB, 下载次数: 31)

捕获.JPG
回复 使用道具 举报
按位求反,,记住规律  结果一定是-(i+1),i就是你所输入的数字!!!
回复 使用道具 举报
~按位取反运算符,,只要记住计算机底层存储的都是以补码的形式存储的,就知道怎么算了
回复 使用道具 举报
#在这里快速回复#~是按位取反20的补码是010100,对其反的补码是101011。然后再转换成原码是110101.yejiu
回复 使用道具 举报
~是取反啊,哥们,20先取反再求反码补码,然后可以得出是-21哦。
回复 使用道具 举报
这是取反运算符,这是一个关于二进制的运算符,教你一个很巧妙的方法,那就是:取反的那个数+取反之后的数=-1;这样计算很快!!
回复 使用道具 举报
~是按位取反运算符;先把数字(20)转换为 二进制数,求它补码,并对补码进行取反,然后用取反后的数末尾加1 ,再取反(就是逆推原码)把得到的结果转换为十进制数就OK了
回复 使用道具 举报
ALin 中级黑马 2015-7-11 23:56:59
18#
~是java/c++中的一个位运算符  即按位取反,1变0,0变1.
20的二进制是0001_0100,与之对应的反码是1110_1011。

-21的二进制(负数的的二进制 = 该数的 绝对值取反 + 1)
21的二进制是0001_0101,反码为1110_1010,
1的二进制是0000_0001,
即-21的二进制是 1110_1011,与20的反码相等,所以~20=21
回复 使用道具 举报
kime 中级黑马 2015-7-11 23:56:47
17#
~:0变1,1变0 取反符号
回复 使用道具 举报
首先你要知道,数据运算和存储在计算机中都是以二进制补码的形式进行的。好了在此前提下我们解题:

无标题.png (30.84 KB, 下载次数: 124)

解题示意图

解题示意图
回复 使用道具 举报
按位取反
回复 使用道具 举报
~是按位取反操作符
  
回复 使用道具 举报
~是java中的一个位运算符  反码,
20的二进制是0001_0100,与之对应的反码是1110_1011。

-21的二进制(涉及到负数的表现形式的知识内容:负数的的二进制 = 该数的 绝对值取反 + 1)
21的二进制是0001_0101,反码为1110_1010,
1的二进制是0000_0001,
故,-21的二进制是 1110_1011,与20的反码相等。

    1110_1010
  +0000_0001
——————
    1110_1011

回复 使用道具 举报
   按位取反运算符~
回复 使用道具 举报
黑马和大灰狼 来自手机 中级黑马 2015-7-11 01:02:02
11#
按位取反
回复 使用道具 举报
计算机中数据的运算和存储都是以二进制的补码进行的。 ~是位运算中的反码运算符。 首先,正数的原码,反码和补码都是一样的。 20在内存中的二进制表示是: 00000000 00000000 00000000 00010100 ~20就是对20的补码进行取反:11111111 11111111 11111111 11101011   (注意:~运算时,符号位也要参与)            那么获得的补码对应的十进制数是什么呢? 我们知道,求一个十进制数的二进制的补码的步骤是:二进制原码取反后+1即得补码。 难么,我们接下来可以由获得的补码反向推出原码,方法是: 补码:11111111 11111111 11111111 11101011   反码:11111111 11111111 11111111 11101010        原码:10000000 00000000 00000000 00010101      (注意:这里在取得反码的时候,符号位不参与运算,因为要保证数据的原样)  可以知道,该原码所表示的十进制数是-21。即得到结果。
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马