一个关于补码的有趣的例子

问    Math.abs(-2147483648)的返回值是什么?

答    -2147483648表示的int整形的最小负值,其16进制表达为0x80000000, 当求其绝对值时,先将其按位取反,得到0x7f ff ff ff,

        然后加1,得到0x80000000,表示为十进制仍然为-2147483648。

附注

       在计算机中,数据均使用补码表示。什么是补码呢,先了解原码,反码定义。

        原码,最高位为符号位,0表示正数,1表示负数,其余低位表示绝对值。比如

       10的原码为 (00000000 00000000 00000000 00001010),

       -10的原码为(10000000 00000000 00000000 00001010).

        反码,最高位为符号位,同上表示,正数的反码与其原码相同,负数的反码其绝对值位按位取反。比如  

      10的原码为  (00000000 00000000 00000000 00001010),

       -10的原码为(11111111 11111111 11111111 11110101).

       补码,最高位符号位,同上表示,正数的补码与其原码相同,负数的补码为其绝对值位按位取反,再加上1.比如  

      10的原码为  (00000000 00000000 00000000 00001010),

       -10的原码为(11111111 11111111 11111111 11110110).

    

      正数的绝对值位其补码低位,负数的绝对值为其按位取反再加1.      


      附上java源码和运行结果,

        package myAlgoth;
        public class myMain {
  public myMain() {
// TODO Auto-generated constructor stub
  }
  public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.printf("%d\n", -2147483648);
System.out.printf("%d", Math.abs(-2147483648)); 

}
     }

     结果为:

     -2147483648
     -2147483648

    

       

   

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值