Java中byte数据类型负数表示法——补码表示法
知识要点
-
byte数据类型范围产生的原因
探究Java中byte数据类型范围为何是(-128到127)
- 源码和补码的基本概念
- 负数源码转二进制的方式
先验证
我们先看结果,我们依然采用编译器验证
-1
public class HelloWorld {
public static void main(String []args) {
byte a = -1;
//使用下面的byte转换二进制字符串
String b = getBinaryStrFromByte(a);
System.out.println(b);
}
public static String getBinaryStrFromByte(byte b){
String result ="";
byte a = b; ;
for (int i = 0; i < 8; i++){
byte c=a;
a=(byte)(a>>1);//每移一位如同将10进制数除以2并去掉余数。
a=(byte)(a<<1);
if(a==c){
result="0"+result;
}else{
result="1"+result;
}
a=(byte)(a>>1);
}
return result;
}
}
-2
谈负数源码转二进制
源码表示法
符合我们直觉的是源码表示法,所谓的源码表示法即byte a = -1,如果将最高位变成1,二进制应该是1000 0001,但实际上,他却是1111 1111,这是补码表示法的结果,那么我们下面继续研究补码表示法
补码表示法
- -1:1的源码表示是0000 0001,取反是1111 1110,然后加1,就是1111 1111
- -2:2的源码表示是0000 0010,取反是1111 1101,然后加1,就是1111 1110
版权声明:本文为qq_39123467原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。