「java补码规则」java原码补码
本篇文章给大家谈谈java补码规则,以及java原码补码对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
- 1、Java里byte类型最大和最小值的二进制表示?
- 2、Java中,byte b=3; b=(byte)(b+200); 输出 b为什么是 —53 ?
- 3、java中byte b=10;byte b1=~b;编译错误原因。byte b 2=~10;是正
- 4、java中int类型最小值的二进制原码和补码表示方式
- 5、java求补码
- 6、java的运算中~10为什么是-11
Java里byte类型最大和最小值的二进制表示?
Java用的是补码,补码的规则就是这样,每位都是 1 就表示负一,最高位是 1 其余位是 0 表示的是最小值
Java中,byte b=3; b=(byte)(b+200); 输出 b为什么是 —53 ?
首先都知道:byte类型的范围是-128到127.
b+200=203超过范围了,java中就得用补码进行存储。
所谓补码,就是符号位不变,其余位取反,最后+1.
符号位指的是二进制中的第一位,比如1100 0011中,第一个1就是符号位。(1表示负数,0表示整数)
203的二进制位:1100 1011
取补码: 1011 0100=52(注意符号位不参与运算) ,结果+1=53。又因为符号位是1,所以是-53
java中byte b=10;byte b1=~b;编译错误原因。byte b 2=~10;是正
java中byte在内存中实际上是用int运算的。b取反后,会自动变成int类型。加法、减法,都一样,byte会自动变成int类型。所以会报错。
而~10可以,这是java字面量编译原则,会先将~10计算出来。在赋值给byte,所以不会有问题。
java中int类型最小值的二进制原码和补码表示方式
反码补码的规则,对int最小值没有用,最小值的源码是1个1,31个0,反码之后是32个1,直接变成-1了,补码加1变成0
java求补码
~在c和java语言中都是求反码,或者叫位非NOT运算。
java的运算有特殊性:
4的二进制为100,
执行~4后转换成32位有符号整型(int),值为11111111111111111111111111111011
打印时,按有符号解释成-5。
C语言的运算和java大类相同,但要注意几点
1、注意意无符号的情况。unsigned int i=~4;的值就是4294967291
2、注意变量的数据长度。在c中,char和char之间,short和short之间,long和long之间的加减都按本身定义的长短。而不像java都统一转换成32位int后进行运算
3、注意显示时符号的有无。printf中的%d和%u对显示结果就有本质区别
java的运算中~10为什么是-11
说明:1.~运算为按位取反
2.计算机中的数据都是2进制补码
3.一个10进制数转化为2进制数,即放入计算机时,要根据10进制正负(+、-)不同的补码规则转化
4.同理,计算机中的2进制数转化为你习惯的10进制数时,也会根据2进制正负(0、1)不同的补码规则转化
5.要学会利用计算机的思维理解数据 以及他们的运算
6.现在内存或得了一个数0000 1010,你让cpu计算它的~值,他直接就取反,得到一个数1111 0101,结果他一想,你可能听不懂他说的啥,还是好心的给你转换为你能理解的10进制吧。但是cpu一看这是一个负数,于是根据人类的要求,需要先把他转换为原码的形式再转10进制,于是乎(1111 0101)-1=1111 0100,除符号位求反变为1000 1011,转为10进制就是-11啦
java补码规则的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于java原码补码、java补码规则的信息别忘了在本站进行查找喔。
发布于:2022-12-01,除非注明,否则均为
原创文章,转载请注明出处。