一个关于补码的有趣的例子
来源:互联网 发布:全职猎人 知乎 编辑:程序博客网 时间:2024/06/08 05:59
问 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
- 一个关于补码的有趣的例子
- 关于封装--一个有趣的C++例子
- 一个比较有趣的例子
- 记一个关于标准IO流缓冲区的有趣例子
- 一个有趣的Web Services例子
- java异常中一个有趣的例子
- 关于补码计算的一个实例
- 关于一个“一个有趣的面试题”
- 关于程序的一个有趣的问题
- 一个关于list的有趣的问题
- 有趣的autolayout例子
- 一个关于Java数据类型的有趣问题
- 关于||和&&的一个有趣问题
- 通过一个有趣的例子说明线程的工作机制
- 关于-32768的补码!
- 关于补码的概念
- 关于补码的计算
- 关于2的补码
- 在Solr中配置和使用ansj分词
- HDU2544(Dijkstra优先队列优化版)
- http404问题
- redis和memcache区别
- ubuntu php7.1安装zip扩展
- 一个关于补码的有趣的例子
- spring------------文件资源操作和 Web 相关工具类
- 格雷码与二进制的转换
- 打电话和发短信
- 从零开始搭建环境编写操作系统 AT&T GCC (二)从实模式到保护模式
- 自定义控件的基本方法(以标题栏为例)
- Tengine之IP访问控制
- ubuntu 10.04下提示libstdc++.so.6找不到
- 薪资过万的高级web开发工程师掌握哪些技能