java原码,反码,补码概念

public class UseByte {
public static void main(String[] args) {
/*byte param = 6;
//已知参数
int i = oddEvenNumber(param);
System.out.println("i:"+i);

int j = absNumber(-5);
System.out.println("j:"+j);*/

//最多保存8位,可以写到9或者10位,但是高位(8位后)精度会丢失
//11111111是一个十进制数字
//十进制转换为二进制为:101010011000101011000111
//因为int转换byte,只会保留低8位,也就是11000111
//保留下来的低8位中,最高位是1,也就是负数
//负数在计算机中由补码的方式来保存,此处需要推算该二进制的原码
//反码:11000111 - 1 = 11000110
//源码: 11000110 = 00111001 * -1
byte a = (byte)11111111;
//负数以补码方式展现,输出给控制台,输出结果:-57
System.out.println(a);
byte b = 5;
//输出结果:101
System.out.println(Integer.toBinaryString(b));
//正数的原码,反码,补码都是一样的.
//负数的原码,反码,补码计算方式
//负数原码:该负数绝对值的二进制编码,5的二进制如:101,原码:1000 0000 0000 0000 0000 0000 0101
//负数反码:1111 1111 1111 1111 1111 1111 1010 高1位不变,因为是负数,其他取相反数
//补码:1111 1111 1111 1111 1111 1111 1010 + 1 = 1111 1111 1111 1111 1111 1111 1011
byte c = -5;
System.out.println(Integer.toBinaryString(c));
//输出结果:11111111111111111111111111111011
}

/**
* 取奇偶数
* @param param
* @return
*/
public static int oddEvenNumber(byte param){
return param&1;
}

/**
* 取绝对值
* @param param
* @return
*/
public static int absNumber(int param){
int abs = param >> 31;
return (param^abs)-abs;
}
}
posted @ 2021-07-19 16:36  CoderCoding  阅读(93)  评论(0编辑  收藏  举报