原码、反码和补码
2016-05-22 15:19
253 查看
java中的整数都是有符号的,使用补码来表示,其中最高位是表示符号位,正数则最高位是0,负数是1
为了表示一个整数的补码,我们先了解下原码,反码。
一、原码、反码和补码概念
原码,则直接使用二进制来表示整数,
反码,正数的反码和原码相同,负数的符号位不变,其他数值们取反,即,0变1,1则变成0。
补码,正数的补码和原码相同,负数则求得它的反码再加1 便得到补码。
如,java中是用8个比特来存储byte类型的,
byte类型的 1,原码 0 000 0001,反码 0 000 0001,补码是 0 000 0001,
byte类型的 -1,原码 1 000 0001,反码 1 111 1110, 反码加1,则 补码是 1 111 1111,
其中,
" ^ "是表示幂的意思,如2 ^ 7表示2的7次幂。
三、补码的运算
了解补码运算前,先了解下补码中 模 的概念,
模的概念
如上面提到的byte是用8个比特存储的,那么它的模就是 2 ^ 8 = 256 ,以此类推,int的模是2 ^ 32, long的模就2 ^ 64
在补码中,最高位的符号位也参与 到运算中,运算后的进位值不管是0还是1,都会被运算器丢弃,所以两个整数运算的结果如果超过该整数类型的模后,也不会异常,因为最高们的进位值被丢弃,只是会得到不准确的值
为了表示一个整数的补码,我们先了解下原码,反码。
一、原码、反码和补码概念
原码,则直接使用二进制来表示整数,反码,正数的反码和原码相同,负数的符号位不变,其他数值们取反,即,0变1,1则变成0。
补码,正数的补码和原码相同,负数则求得它的反码再加1 便得到补码。
如,java中是用8个比特来存储byte类型的,
byte类型的 1,原码 0 000 0001,反码 0 000 0001,补码是 0 000 0001,
byte类型的 -1,原码 1 000 0001,反码 1 111 1110, 反码加1,则 补码是 1 111 1111,
二、整数类型的取值范围
类型 | 范围 |
byte | 8比特,带符号,二进制补码(-2 ^ 7 至 2 ^ 7 -1) |
short | 16比特,带符号,二进制补码(-2 ^ 15 至 2 ^ 15 -1) |
int | 32比特,带符号,二进制补码(-2 ^ 31 至 2 ^ 31 -1) |
long | 64比特,带符号,二进制补码(-2 ^ 63 至 2 ^ 63 -1) |
char | 16比特,不带符号,Unicode字符(0 至 2 ^ 16 -1) |
" ^ "是表示幂的意思,如2 ^ 7表示2的7次幂。
三、补码的运算
了解补码运算前,先了解下补码中 模 的概念,模的概念
如上面提到的byte是用8个比特存储的,那么它的模就是 2 ^ 8 = 256 ,以此类推,int的模是2 ^ 32, long的模就2 ^ 64在补码中,最高位的符号位也参与 到运算中,运算后的进位值不管是0还是1,都会被运算器丢弃,所以两个整数运算的结果如果超过该整数类型的模后,也不会异常,因为最高们的进位值被丢弃,只是会得到不准确的值
相关文章推荐
- Linux命令——磁盘管理
- 第十二周学习进度条
- 基地三部曲观后感
- leetcode 096 Unique Binary Search Trees
- Web前端开发环境搭建
- 清除浮动的几种方法
- 有哪些办法可以剔除股东?
- JavaScript中的原始类型
- 数据化运营管理_互联网行业(一)(流量篇)
- 验毛坯房要注意什么?
- JVM 1.6 GC
- SSD的TRIM功能有什么作用
- System.getProperties()
- vector容器部分源码实现
- 软考总结篇
- 从服务器下载文件,读内容到buffer中
- android中对json解析(上传数据以及解析返回值)
- 机器人传感器的分类
- 多核CPU、多进程、多线程之间的联系
- 一步步学spark之一scala常用类型1.2