黑马程序员技术交流社区

标题: 关于位运算符,左移右移问题 [打印本页]

作者: 646245771    时间: 2014-4-20 15:54
标题: 关于位运算符,左移右移问题
本帖最后由 646245771 于 2014-4-21 11:04 编辑

看了毕老师的视频,然后有有一点不明白。求大神指教。

例如:3<<2 表示3的二进制位像左移动两位  也就是
0000 0000 0000 0000 0000 0000 0000 0011向左移动2位结果是
0000 0000 0000 0000 0000 0000 0000 1100=12
同理
3>>2 表示3的二进制位向右移动两位,也就是
0000 0000 0000 0000 0000 0000 0000 0000=0

那么我的问题是  -3<<2和 -3>>2这个怎么算的。求负数的详细讲解。




作者: skill20    时间: 2014-4-20 16:20
本帖最后由 skill20 于 2014-4-20 16:21 编辑

  0000 0000 0000 0000 0000 0000 0000 0011 ----3

  1111 1111 1111 1111 1111 1111 1111 1100 ----3取反
+0000 0000 0000 0000 0000 0000 0000 0001 ----+1
————————————————————————
  1111 1111 1111 1111 1111 1111 1111 1101 ----- -3

   1111 1111 1111 1111 1111 1111 1111 1111  >>2     -3右移 2位,负数最高位是 1 ,右移后最高位补 1.

    1111 1111 1111 1111 1111 1111 1111 0100  << 2   -3左移 2位,负数最高位是 1 ,左移后最高位补 1.
作者: 悠然丶    时间: 2014-4-20 16:24
-3 = 3 的二进制取反 + 1  
0000 0000 0000 0000 0000 0000 0000 0011  =3
1111 1111 1111 1111 1111 1111 1111 1100  取反
0000 0000 0000 0000 0000 0000 0000 0001 +1
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1111 1111 1111 1111 1111 1111 1111 1101 = -3
-3<<2的结果:
1111 1111 1111 1111 1111 1111 1111 0100   是一个负数
转换成十进制   一样取反+1
0000 0000 0000 0000 0000 0000 0000 1011 取反
0000 0000 0000 0000 0000 0000 0000 0001 +1
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
0000 0000 0000 0000 0000 0000 0000  1100   =  -12(!!!!)


作者: 646245771    时间: 2014-4-20 16:31
skill20 发表于 2014-4-20 16:20
0000 0000 0000 0000 0000 0000 0000 0011 ----3

  1111 1111 1111 1111 1111 1111 1111 1100 ----3取反 ...

谢谢,我脑袋突然转过来这个弯了:)
作者: 646245771    时间: 2014-4-20 16:32
悠然丶 发表于 2014-4-20 16:24
-3 = 3 的二进制取反 + 1  
0000 0000 0000 0000 0000 0000 0000 0011  =3
1111 1111 1111 1111 1111 1111  ...

谢谢,我脑袋突然转过来这个弯了:)   受教了
作者: 悠然丶    时间: 2014-4-20 16:35
646245771 发表于 2014-4-20 16:32
谢谢,我脑袋突然转过来这个弯了   受教了

不客气,让我也加深了理解,好多快忘记了




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2