Java中byte数据类型负数表示法——补码表示法

  • Post author:
  • Post category:java




Java中byte数据类型负数表示法——补码表示法



知识要点

  1. byte数据类型范围产生的原因


    探究Java中byte数据类型范围为何是(-128到127)
  2. 源码和补码的基本概念
  3. 负数源码转二进制的方式



先验证

我们先看结果,我们依然采用编译器验证

-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 版权协议,转载请附上原文出处链接和本声明。