java 中 如何表示负数 【16进制】

来源:互联网 发布:macbook中文下载软件 编辑:程序博客网 时间:2024/06/05 18:14

1. java中的int是32位,  首位表示为是正还是负。 所以范围是

1 000 0000  0000 0000 0000 0000 0000 0000 ~ 0   111  1111  1111 1111   1111 1111  1111 1111   就是后面跟31个0 ~ 31个1 

   即 ox80000000 ~ ox7FFFFFFF 即  -2147483648~2147483647

   这里面有个知识点,0   111  1111  1111 1111   1111 1111  1111 1111   ==  2147483647 比较好理解,就是2 的31次方 减去1
   但是1 000 0000  0000 0000 0000 0000 0000 0000 为什么表示  -2147483648 呢?难道不应该表示2的32次方吗? 
   因为 十进制的负数是通过 负数的原码的补码表示的,补法的表示即是把负数的原码取反再加1
    
    算的步骤如下:
        (1) 计算负数相应正数的原码: -2147483648 的 相应正数的原码 2147483648 =   1000 0000  0000 0000 0000 0000 0000 0000   (2的31次方 ==2147483648 )
       (2)取反再加1:即 0111 1111  1111 1111 1111 1111 1111 1111  加上1 ,即 1 000 0000  0000 0000 0000 0000 0000 0000 ,即 ox80000000
=======================================================================================================
  SignalStrength.java  
 //Use int max, as -1 is a valid value in signal strength
    public static final int INVALID = 0x7FFF FFFF;  ,这个值是2147483647 , -1 应该是0xFFFFFFFF

    -1 的补码计算如下:
        (1) 计算负数相应正数的原码: -1 的 相应正数的原码 1 =   0000 0000  0000 0000 0000 0000 0000 0001  
       (2)取反再加1:即 1111 1111  1111 1111 1111 1111 1111 1110 再加 1,即0xFFFFFFFF

0 0
原创粉丝点击