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 补码实践的更多相关文章

  1. 大型网站系统与Java中间件实践

    大型网站系统与Java中间件实践(贯通分布式高并发高数据高访问量网站架构与实现之权威著作,九大一线互联网公司CTO联合推荐) 曾宪杰 著   ISBN 978-7-121-22761-5 2014年4 ...

  2. Java注解实践

    Java注解实践 标签 : Java基础 注解对代码的语意没有直接影响, 他们只负责提供信息给相关的程序使用. 注解永远不会改变被注解代码的含义, 但可以通过工具对被注解的代码进行特殊处理. JDK ...

  3. 《大型网站系统与JAVA中间件实践》【PDF】下载

    <大型网站系统与JAVA中间件实践>[PDF]下载链接: https://u253469.pipipan.com/fs/253469-230062557 内容简介 到底是本什么书,拥有这样 ...

  4. Atitit.异常的设计原理与 策略处理 java 最佳实践 p93

    Atitit.异常的设计原理与 策略处理 java 最佳实践 p93 1 异常方面的使用准则,答案是:: 2 1.1 普通项目优先使用异常取代返回值,如果开发类库方面的项目,最好异常机制与返回值都提供 ...

  5. java 分布式实践

    java 分布式实践 spring boot cloud实践 开源的全链路跟踪很多,比如 Spring Cloud Sleuth + Zipkin,国内有美团的 CAT 等等. 其目的就是当一个请求经 ...

  6. 一次从0到1的java项目实践清单

    虽说工作就是简单的事情重复做,但不是所有简单的事你都能有机会做的. 我们平日工作里,大部分时候都是在做修修补补的工作,而这也是非常重要的.做好修补工作,做好优化工作,足够让你升职加薪! 但是如果有机会 ...

  7. JAVA爬虫实践(实践一:知乎)

    爬虫顺序 1.分析网站网络请求 通过浏览器F12开发者工具查看网站的内容获取方式. 2.模拟HTTP请求,获取网页内容. 可以采用HttpClient,利用JAVA HttpClient工具可以模拟H ...

  8. Java基础(Java补码)

    原码,反码,补码是java数值运算的基础,在计算机程序中,数值运算是基于二进制的,也就是说底层是二进制运算.而数值有正数与负数,二进制只有0和1,如何表示负数,如何进行正负数的运算,这就是原反补的意义 ...

  9. 一份从0到1的java项目实践清单

    虽说工作就是简单的事情重复做,但不是所有简单的事你都能有机会做的. 我们平日工作里,大部分时候都是在做修修补补的工作,而这也是非常重要的.做好修补工作,做好优化工作,足够让你升职加薪! 但是如果有机会 ...

随机推荐

  1. css小知识 2

    效果为 为什么还出现出现不同的效果? 浏览器在解析第二个p的时候,因为第二个字母见没有空格,它会认为这是一个单词没有写完,所以不会换行 列表 1.无序列表ul 第二,内部必须有子代标签<li&g ...

  2. mysql批量插入

    有多种方式 其中效率高 要求低的方式 是 把sql拼接出来 后一次性commit: eg: public int insertBatch(List<PeccDetailModel> lis ...

  3. 树状数组 || 线段树 || Luogu P5200 [USACO19JAN]Sleepy Cow Sorting

    题面:P5200 [USACO19JAN]Sleepy Cow Sorting 题解: 最小操作次数(记为k)即为将序列倒着找第一个P[i]>P[i+1]的下标,然后将序列分成三部分:前缀部分( ...

  4. 洛谷试炼场 - 关卡1-5 - 简单字符串 - (Done)

    P1055 ISBN号码 #include<bits/stdc++.h> using namespace std; string s; ]={','X'}; int main() { ci ...

  5. 项目实战02:LVS 实现负载均衡

    目录 实现基于LVS负载均衡集群的电商网站架构 实战一:LVS的NAT模式实现负载均衡 实战二:LVS的DR 模式实现负载均衡 实战三:实现80.443端口都可访问服务,且LVS实现持久连接 实验四: ...

  6. 11.1-uC/OS-III就绪列表

    准备好运行的任务被放到就绪列表中, 如图6-1.就绪列表是一个数组( OSRdyList[]),它一共有OS_CFG_PRIO_MAX条记录,记录的数据类型为OS_RDY_LIST(见OS.H).就绪 ...

  7. java框架之SpringCloud(5)-Hystrix服务熔断、降级与监控

    前言 分布式系统面临的问题 复杂分布式体系结构中的应用程序有数十个依赖关系,每个依赖关系在某些时候将不可避免地失败.不做任何处理的情况下,很容易导致服务雪崩. 服务雪崩:多个微服务之间调用的时候,假设 ...

  8. es6合并数组...

    加了...和不加...是不一样,...会把原来数组拆开

  9. phpstorm----------phpstorm2017基本使用

    1.关闭2017版本的,函数参数提示.关闭方式如下: 2.如何设置代码里面的变量等号对齐,和key => value 对齐     ctrl+alt+l 3.修改PHP文件类创建的默认注释 4. ...

  10. 更改linux终端中用户名颜色

    用户名的设置在-下.bashrc文件中,更改PS1变量的值,如果没有就自己加一行 PS1='\[\e[32m\][\u@\h \W]#\[\e[m\] ' 32代表的是绿色前景色,\[\e[m\]是关 ...