文档章节

java原码、补码、反码总结

loyal
 loyal
发布于 2016/05/05 21:45
字数 696
阅读 76
收藏 0

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

原理如下图:




本文转载自:http://blog.csdn.net/qq_30739519/article/details/50991484

共有 人打赏支持
loyal

loyal

粉丝 70
博文 68
码字总数 334
作品 0
技术主管
私信 提问
Java二进制位运算、移位运算>>、>>

Java二进制位运算、移位运算 思考题 1、请看下面的代码段,回答a,b,c,d,e结果是多少? 注:">>"代表算术右移,"<<"代表算术左移,">>>"代表逻辑右移 2、请回答在java中,下面的表达式运算的结......

郑加威
2017/03/09
0
0
Java中的Comparable接口和Comparator接口

最近Algorithms 4 课上提到了排序。趁着这个机会,梳理一下。 1. 介绍 接口和接口都是JDK中提供的和比较相关的接口。使用它们可以对对象进行比较大小,排序等操作。这算是之后排序的先导知识...

架构师springboot
2018/12/02
0
0
java核心基础 --- 基本数据类型

本篇博文主要介绍 java 基础数据类型、基本类型的数据转换、自动装箱拆箱机制。 1. 基础数据类型 整型 整型包含 byte(1字节)、short(2字节)、int(4字节)、long(8字节) 需要注意的是,...

firepation
01/24
0
0
java byte数据类型详解

Java代码 public static String bytes2HexString(byte[] b) { String ret = ""; for (int i = 0; i < b.length; i++) { String hex = Integer.toHexString(b[ i ] & 0xFF); if (hex.length()......

buleberry
2014/04/09
0
0
Java拾遗:014 - 二进制、进制转换及位运算

二进制 二进制是计算机中广泛采用的一种数制,由0和1组成,进位规则为“逢二进一”,如:0001表示十进制中的1,0010表示十进制中的2。二进制拥有大量非学有用的特性,详情参考:百度百科:二...

一别丶经年
2018/08/02
0
0

没有更多内容

加载失败,请刷新页面

加载更多

IOS  学习记录

1.StackView=>IOS 9及以上支持 2.布局方式: AutoLayout / StackView 堆布局 (线性布局) 3.屏幕适配 (资源分辨率、设计分辨率、屏幕分辨率) Size Class技术 可以针对 屏幕的方向进行设置...

萨x姆
36分钟前
0
0
第四次工业革命:自主经济的崛起

https://36kr.com/p/5170370.html

shengjuntu
昨天
3
0
Cloud Native 与12-Factor

12-Factor(twelve-factor),也称为“十二要素”,是一套流行的应用程序开发原则。Cloud Native架构中使用12-Factor作为设计准则。 12-Factor 的目标在于: 使用标准化流程自动配置,从而使...

waylau
昨天
9
0
java多线程2

“非线程安全”问题存在于“实例变量”中,如果是方法内部的私有变量,则不存在线程安全问题。这是因为方法内部的变量都是私有造成的。 synchronized 获取的都是对象锁。如果多个线程访问多个...

一滴水穿石
昨天
4
0
今天的学习

1,document.location.href:获取整个url 2,str.split(' '):用字符分割字符串 3,$this->load->library(' '):引用图像处理类 4,$this->load->library(' '):引用Email类 5,特殊访问指针$th......

墨冥
昨天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部