黑马程序员技术交流社区
标题:
位运算~
[打印本页]
作者:
yangchao8907
时间:
2013-8-6 11:38
标题:
位运算~
本帖最后由 杨兴庭 于 2013-8-6 19:02 编辑
~6=-7,为什么?运算过程。~有什么应用吗?(~:取反符号)
6: 0000-0000 0000-0000 0000-0000 0000-0110
取反: 1111-1111 1111-1111 1111-1111 1111-1001
1000-0000 0000-0000 0000-0000 0000-0110 是不是有这么一步?为什么?
+1: 0000-0000 0000-0000 0000-0000 0000-0001
--------------------------------------------------------------------
1000-0000 0000-0000 0000-0000 0000-0111 -------- -7
作者:
王松松
时间:
2013-8-6 12:50
与你一同学习!{:soso_e141:}
qufan.PNG
(25.17 KB, 下载次数: 33)
下载附件
2013-8-6 12:49 上传
作者:
王松松
时间:
2013-8-6 12:56
其实简单点 ~6 + 1 = - 6 ,那么 ~6 就等于 -6 - 1 = -7。
作者:
张玉建
时间:
2013-8-6 13:16
6: 0000-0000 0000-0000 0000-0000 0000-0110
取反: 1111-1111 1111-1111 1111-1111 1111-1001只要求出这个数的十进制的值
就可以反过来思考,二进制代码是负数,先减1后取反
1111-1111 1111-1111 1111-1111 1111-1001
- 0000-0000 0000-0000 0000-0000 0000-0001
-------------------------------------------------------------------
1111-1111 1111-1111 1111-1111 1111-1000
反过来
0000-0000 0000-0000 0000-0000 0000-0111-------- 7
在返回去
不就是-7了
1000-0000 0000-0000 0000-0000 0000-0110 这个是什么?要是负数前必须全是1111-1111 1111-1111 1111-1111 1111
作者:
EYE_SEE_YOU
时间:
2013-8-6 13:23
本帖最后由 EYE_SEE_YOU 于 2013-8-6 13:28 编辑
一个数取反加1等于这个数的负数
所以你看,取反就是二进制中把所有的1和0互换一下
6:0000 0000 0000 0110
~6:1111 1111 1111 1001 这个值算出来是-7, 最末位加个1就等于-6了
-6:1111 1111 1111 1010
~-6: 0000 0000 0000 0101 这个值算出来是5, 最末尾加个1就等于 6了
这个是规律,
用取反可以快速算的
某个数的负数的二进制值-a=~a+1(末位)
作者:
_____蒲❤๑
时间:
2013-8-6 14:27
6: 0000-0000 0000-0000 0000-0000 0000-0110
取反: 1111-1111 1111-1111 1111-1111 1111-1001
因为你先把6转换成二进制 ,6取反运算后变成了一个负数 ,这串二进制代表一个负数,将它转换成int型过程:
(1111-1111 1111-1111 1111-1111 1111-1001) -1 =1111-1111 1111-1111 1111-1111 1111-1000
再取反:0000-0000 0000-0000 0000-0000 0000-0111 =7
再因为整数6取反运算变成负数 ,所以结果为 -1 .
作者:
昨夜星风
时间:
2013-8-6 14:58
首先要理解负数二进制的表现形式,就是对应的正数的二进制取反加1
取反就是将二进制的中的1变0 0变1
对于本题 我的理解是 如果6取反(即:~6),思考:
反向考虑正数6的负数的二进制的表现
6: 0000-0000 0000-0000 0000-0000 0000-0110
取反: 1111-1111 1111-1111 1111-1111 1111-1001
1111-1111 1111-1111 1111-1111 1111-1001
+ 0000-0000 0000-0000 0000-0000 0000-0001
----------------------------------------------------------------------------
1111-1111 1111-1111 1111-1111 1111-1010
得出来是 -6
所以我们能得到: ~6 + 1 = - 6
即: ~6后加1得 - 6
反过来: ~6后减1得 -7
作者:
心灵之歌
时间:
2013-8-6 15:33
~6=-7,为什么?
等于这个数的绝对值,取反加1,。
运算过程。~有什么应用吗?(~:取反符号)
6: 0000-0000 0000-0000 0000-0000 0000-0110
取反: 1111-1111 1111-1111 1111-1111 1111-1001
1000-0000 0000-0000 0000-0000 0000-0110 是不是有这么一步?为什么?//因为一个负数的二进制的最高位是1.
+1: 0000-0000 0000-0000 0000-0000 0000-0001
--------------------------------------------------------------------
1000-0000 0000-0000 0000-0000 0000-0111 -------- -7//所以结果为-7.
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2