java吧 关注:1,291,900贴子:12,821,384
  • 57回复贴,共1

int a = 8; System.out.println(~a)为什么等于-9呢

只看楼主收藏回复

这个还是不太了解,视频上说8用二进制是1000, 取反的话是0111,符号取反的话也应该是-7才对。。。


1楼2014-02-09 20:45回复
    是-8吧。。。


    IP属地:上海来自Android客户端2楼2014-02-09 21:20
    收起回复
      2025-12-20 10:08:16
      广告
      不感兴趣
      开通SVIP免广告
      计算机里是没有负数的, 负数在二进制种表示为 第一位为1的数 如果全部都是1的话 比如 1111 就在计算机里表示为 -1 -1+1 就是 10000 超出4位的省略 就为0000 也就是0


      3楼2014-02-09 21:27
      回复
        8=00001000
        11110111 取反
        11110110 减一
        00001001 得到负数的整数部分。9 。所以-9
        ——层主吊炸天。


        IP属地:上海来自iPhone客户端5楼2014-02-09 21:39
        收起回复
          楼主看的是shangxuetang的视频吧


          IP属地:北京7楼2014-02-14 16:41
          收起回复
            实际应用怎么用


            IP属地:广东来自iPhone客户端8楼2014-02-15 19:40
            收起回复
              关于-1对称 你说呢


              IP属地:湖南10楼2014-02-16 19:32
              回复
                任何数据在计算机中是以二进制的形式存在的,负数为正数取反再加一。


                11楼2014-02-16 23:19
                回复
                  2025-12-20 10:02:16
                  广告
                  不感兴趣
                  开通SVIP免广告
                  我是不是发现错别字了!


                  来自Android客户端12楼2014-02-17 03:20
                  回复
                    计算机存储是用补码存储的。这个大家都知道。
                    那8的二进制是 00000000 00000000 00000000 00001000
                    8的补码(不变)00000000 00000000 00000000 00001000
                    ~(取反操作符) 11111111 11111111 11111111 11110111
                    补码为(规则符号位不变,其他位变反加1)10000000 00000000 00000000 00001001
                    所以是-9 了


                    IP属地:四川13楼2014-02-17 05:11
                    回复