java 补码实践
java中的数字都是以补码的形式出现
java中的byte要转为数字也是以补码的形式进行的转换
=================================================
负数的补码 = 原码的符号位不变其余位取反后加一
=================================================
特别的数字
有两个数字的补码等于本身:一个是0,另一个为该比特内可表示有符号位区分的二进制形式的最大负数(即1000...)。
0的补码计算方式(以8位为例)如下:先计算它的反码:
1111 1111
再将反码加一:
0000 0000,溢出比特二进制值 = 1(二进制)
忽略溢出,其结果为0(0是唯一计算补码过程中会出现溢出的数字。)。因此0的补码为0。而0 x (-1) = 0,因此其补码仍满足“数字a的补码为 -a”的原则。
若计算1000 0000(这是8位内可表示有符号位区分的二进制形式的最大负数-128)的补码:先计算它的反码:
0111 1111
再加一就是它的补码。
1000 0000
1000 0000 (-128)的补码仍为1000 0000 (-128)。但(-128) x (-1) = 128,因此其补码是以上规则的例外。
总结:由于0可以等于0的二补数-0,以及同样因为8位的二补数可显示的值范围为 -128 ~ 127,但-128的二补数128无法用在已有比特数量为8的比特数量内的可用二补数表示。【在计算其他位数内的可表示有符号位区分的二进制形式的最大负数(即1000...000)时,也会有类似情形。】
所以:0和-128的确是“数字a的补码为 -a”原则中两个特别的数字。
=================================================
// -128原码:1000 0000 0000 0000 0000 0000 1000 0000
// -128反码:1111 1111 1111 1111 1111 1111 0111 1111
// -128补码:1111 1111 1111 1111 1111 1111 1000 0000
System.out.println(Integer.toHexString(-128));
// ffffff80
// (-128 & 0xFF)补码:
1111 1111 1111 1111 1111 1111 1000 0000
& 0000 0000 0000 0000 0000 0000 1111 1111
= 0000 0000 0000 0000 0000 0000 1000 0000
System.out.println(Integer.toHexString(-128 & 0xFF));
// 00000080
// byte byte_128 = (byte) -128 ( --> -128补码保留最后8位 --> 1000 0000 )
// byte_128补码:1000 0000
// byte_128反码:1111 1111 ( 符号位不变其余位取反 )
// byte_128原码:1000 0000 ( 补码取原码 = 补码的补码 )
System.out.println(byte_128);
// -128
// byte byte128 = (byte) 128 ( --> 128补码保留最后8位 --> 1000 0000 )
// byte128补码:1000 0000
// byte128反码:1111 1111 ( 符号位不变其余位取反 )
// byte128原码:1000 0000 ( 补码取原码 = 补码的补码 )
System.out.println(byte128);
// -128
// byte byte233 = (byte) 233 ( --> 233补码保留最后8位 --> 1110 1001 )
// byte233补码:1110 1001
// byte233反码:1001 0110 ( 符号位不变其余位取反 )
// byte233原码:1001 0111 ( 补码取原码 = 补码的补码 )
System.out.println(byte233);
// -23
java 补码实践的更多相关文章
- 大型网站系统与Java中间件实践
大型网站系统与Java中间件实践(贯通分布式高并发高数据高访问量网站架构与实现之权威著作,九大一线互联网公司CTO联合推荐) 曾宪杰 著 ISBN 978-7-121-22761-5 2014年4 ...
- Java注解实践
Java注解实践 标签 : Java基础 注解对代码的语意没有直接影响, 他们只负责提供信息给相关的程序使用. 注解永远不会改变被注解代码的含义, 但可以通过工具对被注解的代码进行特殊处理. JDK ...
- 《大型网站系统与JAVA中间件实践》【PDF】下载
<大型网站系统与JAVA中间件实践>[PDF]下载链接: https://u253469.pipipan.com/fs/253469-230062557 内容简介 到底是本什么书,拥有这样 ...
- Atitit.异常的设计原理与 策略处理 java 最佳实践 p93
Atitit.异常的设计原理与 策略处理 java 最佳实践 p93 1 异常方面的使用准则,答案是:: 2 1.1 普通项目优先使用异常取代返回值,如果开发类库方面的项目,最好异常机制与返回值都提供 ...
- java 分布式实践
java 分布式实践 spring boot cloud实践 开源的全链路跟踪很多,比如 Spring Cloud Sleuth + Zipkin,国内有美团的 CAT 等等. 其目的就是当一个请求经 ...
- 一次从0到1的java项目实践清单
虽说工作就是简单的事情重复做,但不是所有简单的事你都能有机会做的. 我们平日工作里,大部分时候都是在做修修补补的工作,而这也是非常重要的.做好修补工作,做好优化工作,足够让你升职加薪! 但是如果有机会 ...
- JAVA爬虫实践(实践一:知乎)
爬虫顺序 1.分析网站网络请求 通过浏览器F12开发者工具查看网站的内容获取方式. 2.模拟HTTP请求,获取网页内容. 可以采用HttpClient,利用JAVA HttpClient工具可以模拟H ...
- Java基础(Java补码)
原码,反码,补码是java数值运算的基础,在计算机程序中,数值运算是基于二进制的,也就是说底层是二进制运算.而数值有正数与负数,二进制只有0和1,如何表示负数,如何进行正负数的运算,这就是原反补的意义 ...
- 一份从0到1的java项目实践清单
虽说工作就是简单的事情重复做,但不是所有简单的事你都能有机会做的. 我们平日工作里,大部分时候都是在做修修补补的工作,而这也是非常重要的.做好修补工作,做好优化工作,足够让你升职加薪! 但是如果有机会 ...
随机推荐
- 嵌入式常用技术概览之IIC(I2C)
一.先决知识 (1)模电基础知识(用以理解IIC如何通信) 二.IIC概览 I2C是80年代飞利浦(Philips->NXP->高通)研 ...
- JSON.parse()和JSON.stringify()的解析与用途
JSON.parse()和JSON.stringify()的解析与用途 1.parse用于从一个字符串中解析出json对象 如: var str = '{"name":" ...
- 图像分类(二)GoogLenet Inception_v2:Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift
Inception V2网络中的代表是加入了BN(Batch Normalization)层,并且使用 2个 3*3卷积替代 1个5*5卷积的改进版,如下图所示: 其特点如下: 学习VGG用2个 3* ...
- 上传js,js修改html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- c++stack容器介绍
c++stack(堆栈)是一个容器的改编,它实现了一个先进后出的数据结构(FILO) 使用该容器时需要包含#include<stack>头文件: 定义stack对象的示例代码如下: sta ...
- jQuery 学习笔记(5)(事件绑定与解绑、事件冒泡与事件默认行为、事件的自动触发、自定义事件、事件命名空间、事件委托、移入移出事件)
1.事件绑定: .eventName(fn) //编码效率略高,但部分事件jQuery没有实现 .on(eventName, fn) //编码效率略低,所有事件均可以添加 注意点:可以同时添加多个相同 ...
- node os模块
const os = require('os'); console.log(os.homedir()); console.log(os.hostname()); console.log(os.plat ...
- ajax 显示,删除,批量删除,修改反填功能实现
1.页面代码 <body> <h1>显示所有员工信息</h1> <input id="Button1" type="button ...
- iDigital2019数字营销广告主峰会
iDigital 数字营销品牌广告主峰会是定向邀请形式的闭门社交峰会, 现已成长为享誉亚洲的营销广告行业活动, 致力于帮助品牌营销官, 决策者和业界同行在日益整合的数字商业时代下获得战略远景.组委会邀 ...
- 微信小程序返回上一页的方法并传参
这个有点像子-->父传值 第一步,在子页面点击上一步或者保存数据请求成功以后添加如下代码. var pages = getCurrentPages(); var prevPage = pages ...