java原码、补码、反码总结

简介: 1.1. java虚拟机整数在java虚拟机中整数有byte、short、int、long四种 分别表示 8位、16位、32位、64位有符号整数。

1.1. java虚拟机整数

java虚拟机中整数有byteshortintlong四种 分别表示 8位、16位、32位、64位有符号整数。整数使用补码表示。

所以我们先了解一下原码和反码。

1.1.1. 原码

所谓原码就是符号位加上数字的二进制表示,int为例,第一位表示符号 (0正数 1负数)简单期间一个字节表示

+7的原码为: 00000111
 -7的原码为: 10000111

对于原码来说,绝对值相等的正数和负数只有符号位不同。

1.1.2. 反码

一个数如果为正,则它的反码与原码相同;一个数如果为负,则符号位为1,(符号位不变化,其余位数取反)。

换言之 该数的绝对值取反(绝对值取反各位都取反)
为了简单起见,我们用1个字节来表示一个整数:
     +7的反码为:00000111
     -7的反码为: 11111000

1.1.3. 补码

补码:一个数如果为正,则它的原码、反码、补码相同;一个数如果为负,去到反码然后加1。(反码加1就是补码)为了简单起见,我们用1个字节来表示一个整数:
+7的补码为: 00000111
-7的补码为: 11111001

1.1.4. 总结

正数:它的原码、反码、补码相同。

负数:反码符号位不变化,其余位数取反,补码符号位不变化其余各位原码取反(反码)+1换言之 反码+1

 

已知一个负数原码求反码:

步骤:

1.该数的绝对值取反 

已知一个负数反码去求补码:

1.反码+1

 

已知一个负数求反码步骤:

正数的绝对值取反+1

 

已知一个负数求补码步骤:

1.二进制原码表示 

2.符号位不变化为求反码。

3.符号位不变化,其余的加1.

实例如下:

-10求补码步骤:

-10的原码: 10000000 00000000 00000000 00001010

-10的反码: 11111111 11111111 11111111  11110101

-10的补码:11111111 11111111 11111111 11110110

 

已知一个负数的补码,将其转换为十进制数,步骤

   1、先对各位取反;
      2、将其转换为十进制数;
      3、加上负号,再减去1。

  例如:

11111010,最高位为1,所以是负数,先对各位取反得00000101,转换为十进制数得5,加上负号得-5,再减1得-6。

1.1.5. Java byte 类型的取值范围

1.确定byte1个字节,也就是8

2.最大值 0111 1111

3.最小值 1000 0000

4.0111 1111 就是127

5.1000 0000 减去1是 1111 1111 按照位取反 1000 0000 得到-128

1.1.6. 常见问题

int a=232;

 

//0000 0000 1110 1000

System.out.println(Integer.toBinaryString(a));

System.out.println((bytea);

输出结果为-24

原理如下图:




相关文章
|
7月前
|
Java 程序员
Java基础之原码,反码,补码,位运算符
Java基础之原码,反码,补码,位运算符
|
4月前
|
存储 Oracle Java
01 Java概述基础与计算机基础(DOS+进制+原码反码补码)
01 Java概述基础与计算机基础(DOS+进制+原码反码补码)
51 17
|
Java
Java 中位运算,原码,反码,补码的详解
Java 中位运算,原码,反码,补码的详解
112 0
|
存储 Java
【Java基础】八种基本数据类型--原码反码补码
【Java基础】八种基本数据类型--原码反码补码
115 0
|
存储 Java C语言
java补码的计算方法
java补码的计算方法
263 0
|
Java API
Java中常用API总结(5)—— Object类中的深克隆和浅克隆
不管对象内部的属性是基本数据类型还是引用数据类型,都完全拷贝过来;基本数据类型拷贝过来的是具体的数据,引用数据类型拷贝过来的是地址值。在Object类中默认的克隆方式就是浅克隆
201 0
Java中常用API总结(5)—— Object类中的深克隆和浅克隆
|
Java API
Java中常用API总结(4)—— Object类(含实例解读和源码阅读)
Object类所在包是java.lang包,Object 是类层次结构的根,每个类都可以将 Object 作为超类。所有类都直接或者间接的继承自该类;换句话说,该类所具备的方法,其他所有类都继承了。
184 0
Java中常用API总结(4)—— Object类(含实例解读和源码阅读)
|
Java API
Java中常用API总结(3)—— Runtime类(含实例解读)
Runtime类所在包为java.lang包,因此在使用的时候不需要进行导包;并且Runtime类被public修饰了,因此该类是可以被继承的
211 0
Java中常用API总结(3)—— Runtime类(含实例解读)
|
Java API
Java中常用API总结(2)—— System类(含实例解读)
System类所在包为java.lang包,因此在使用的时候不需要进行导包;并且System类被final修饰了,因此该类是不能被继承的
353 0
Java中常用API总结(2)—— System类(含实例解读)
|
Java API
Java中常用API总结(1)—— Math类(含底层源码阅读)
Java中常用API总结(1)—— Math类(含底层源码阅读)
178 0
Java中常用API总结(1)—— Math类(含底层源码阅读)