java吧 关注:1,230,583贴子:12,693,877
  • 16回复贴,共1

小白拜师学java。

只看楼主收藏回复

可以给我讲解一下byte1=67byte2=89 byte3=b1+b2运行出来等于-100为什么吗?说是把字节砍了,是怎么回事?怎么算出来等于-100的?


IP属地:陕西来自iPhone客户端1楼2016-07-24 21:15回复


    IP属地:陕西来自iPhone客户端3楼2016-07-24 21:15
    回复
      有问题可以请教一下吗?


      IP属地:陕西来自iPhone客户端4楼2016-07-24 21:16
      回复
        可以吗


        IP属地:陕西来自iPhone客户端5楼2016-07-24 21:16
        回复
          拜个师傅,


          IP属地:陕西来自iPhone客户端6楼2016-07-24 21:19
          回复
            待遇工作后补上


            IP属地:陕西来自iPhone客户端7楼2016-07-24 21:19
            回复
              得用二进制算 截断


              来自Android客户端8楼2016-07-24 21:22
              回复
                byte类型表示的最大数值是-127到128,你的计算结果是156溢出了


                IP属地:新疆来自Android客户端10楼2016-07-24 21:27
                收起回复
                  溢出了


                  IP属地:安徽来自Android客户端12楼2016-07-24 22:03
                  回复
                    byte占一字节,也就是8位。
                    计算机中最高位是用来表示符号的:0表示正数,1表示负数。所以表示数值的其实只有7位。对于byte类型最大的正数为0111 1111即十进制127.
                    你的计算结果为156,换算成二进制是1001 1100(补码),由于最高位是1,所以计算机当做负数来处理。计算机存储时使用的是补码,换算成反码为1001 1011,
                    原码为1110 0100,去过最高位的符号位,后七位十进制为100,所以结果为-100


                    14楼2016-07-24 22:21
                    回复
                      byt1二进制表示:1000011
                      byt2二进制表示:1011001
                      byt3二进制表示:10011100(该数在byte中表示-100)


                      IP属地:北京来自手机贴吧15楼2016-07-24 23:08
                      回复
                        数值溢出,你把byte换成short或int看看


                        来自Android客户端16楼2016-07-25 11:14
                        回复