1.byte的大小为8bits而int的大小为32bits
2.java的二进制采用的是补码形式
在这里先温习下计算机基础理论
byte是一个字节保存的,有8个位,即8个0、1。
8位的第一个位是符号位,
也就是说0000 0001代表的是数字1
1000 0000代表的就是-1
所以正数最大位0111 1111,也就是数字127
负数最大为1111 1111,也就是数字-128
上面说的是二进制原码,但是在java中采用的是补码的形式,下面介绍下什么是补码
1、反码:
一个数如果是正,则它的反码与原码相同;
一个数如果是负,则符号位为1,其余各位是对原码取反;
2、补码:利用溢出,我们可以将减法变成加法
对于十进制数,从9得到5可用减法:
9-4=5 因为4+6=10,我们可以将6作为4的补数
改写为加法:
9+6=15(去掉高位1,也就是减10)得到5.
对于十六进制数,从c到5可用减法:
c-7=5 因为7+9=16 将9作为7的补数
改写为加法:
c+9=21(去掉高位1,也就是减16)得到5.
在计算机中,如果我们用1个字节表示一个数,一个字节有8位,超过8位就进1,在内存中情况为(100000000),进位1被丢弃。
⑴一个数为正,则它的原码、反码、补码相同
⑵一个数为负,刚符号位为1,其余各位是对原码取反,然后整个数加1
- 1的原码为 10000001
- 1的反码为 11111110
+ 1
- 1的补码为 11111111
0的原码为 00000000
0的反码为 11111111(正零和负零的反码相同)
+1
0的补码为 100000000(舍掉打头的1,正零和负零的补码相同)
Integer.toHexString的参数是int,如果不进行&0xff,那么当一个byte会转换成int时,由于int是32位,而byte只有8位这时会进行补位,
例如补码11111111的十进制数为-1转换为int时变为11111111111111111111111111111111好多1啊,呵呵!即0xffffffff但是这个数是不对的,这种补位就会造成误差。
和0xff相与后,高24比特就会被清0了,结果就对了。
----
Java中的一个byte,其范围是-128~127的,而Integer.toHexString的参数本来是int,如果不进行&0xff,那么当一个byte会转换成int时,对于负数,会做位扩展,举例来说,一个byte的-1(即0xff),会被转换成int的-1(即0xffffffff),那么转化出的结果就不是我们想要的了。
而0xff默认是整形,所以,一个byte跟0xff相与会先将那个byte转化成整形运算,这样,结果中的高的24个比特就总会被清0,于是结果总是我们想要的。
分享到:
相关推荐
详细介绍JAVA中原码,补码,反码的概念,对于初学者有较好的帮助。
我自己写的,感觉 补码到原码的转化,在程序中会用到。我写的是一个串口通讯的项目。我网上找了很久,发现都没有人写过这个代码,我调试了半天,写成功了,大家有需要,就下载,也给我加加积分
补码,在Java(以及大多数现代计算机系统中)中,整数通常使用补码(Two's Complement)形式来表示。补码表示法不仅简化了加减运算,还使得负数的存储和正数一样简单高效
整数转二进制补码的源代码 提供了两种方法:一种调用java api中的方法。另一种是自己实现的。
主要介绍了Java为什么使用补码进行计算的原因分析,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
主要为大家详细介绍了java原码补码反码的关系,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
计算机中的原码、反码和补码的详细解释。。。。
java实现源码转补码JavaScript Snowball Stemmers 所有 JavaScript 词干分析器都是从使用 transpiler 的词干算法的 Java 实现中转译而来的。 该项目不仅提供预构建的 JavaScript 词干分析器,还允许创建新的词干分析...
java二进制补码源码 Java程序的基本结构练习:创建同一个类的多个对象 请在中创建指定类的多个对象并修改其成员。在提交Pull Request之前,你应当在本地确保所有代码已经编译通过,并且通过了测试(mvn clean verify)...
java二进制补码源码
JAVA基础补充(0)-原码反码补码
java实现源码转补码目录 变量范围 当地的 实例 类/静态 在方法、构造函数或块中声明 在类中声明,但在方法/块之外 与实例相同,但使用static关键字 进入区块时创建,退出区块时销毁 在创建对象时创建 ( new )。 当为...
java二进制补码源码 Java程序的基本结构练习:在不同的包中创建两个类 请在如下的包中创建指定的类: 在com.github.hcsp.pet1包中创建一个名为Cat的公开类public class。 在com.github.hcsp.pet2包中创建一个名为Dog...
java实现源码转补码很棒的 LINQ 介绍 精选的精选 LINQ 库、工具等。 目标是建立一个由社区驱动的非常知名资源的分类集合。 灵感来自 GitHub 上的整个awesome-*趋势。 随时欢迎分享、建议和贡献! 请先看一看。 感谢...
java二进制补码源码Dubbo是一个来自阿里巴巴的开源分布式服务框架,当当根据自身的需求,为Dubbo实现了一些新的功能,包括REST风格远程调用、Kryo/FST序列化等等,并将其命名为Dubbox。 Demo:类似范例: ##Dubbo...
Day02:进制转换和补码运算 Day03:java 的移位和逻辑运算 Day04:java 的基本语句 Day05:java 的循环语句和方法数组介绍 Day06:java 的递归和二维数组介绍 Day07:java 的排序算法介绍 Day08:java 的面向对象...
java二进制补码代码 Twilio Authy两因素身份验证(2FA)API的Java客户端 有关Authy API的Java使用情况的文档,请参见。 Authy API支持2FA的多个渠道: 通过短信和语音的一次性密码。 软令牌(通过Authy App) 通过...
A Java 内部只有二进制补码 B Java 内部采用补码运算, 自动发送上溢出和下溢出 C Java内部没有10进制! 但是Java尽量按照人类习惯输入输出 D 补码的负数 最高位是 1, 也称作符号位
本书共分20章,第1-4章解释了java虚拟机的体系结构,包括java栈、堆、方法区、执行引擎等;第5-20章深入描述了java技术的内部细节,包括垃圾收集、java安全模型、java的连接模型和动态扩展机制、class文件、运算及...
项目介绍地址:https://blog.csdn.net/HXBest/article/details/120886580 如有问题,可看介绍加微信,或B站私信,给予指导。