Java语言中表示不同进制的语法
- 二进制:0b
- 八进制:0
- 十六进制:0x
Java中永远是以十进制来输出的。
public static void main(String[] args) {
int num = 67, i = 0;
int[] arr = new int[100];
while(num != 0) {
arr[i] = num % 8;
i++;
num /=8;
}
for(int t = i - 1; t >= 0; t--) {
System.out.print(arr[t]);
}
System.out.println();
System.out.println(0b10100101);
System.out.println(0xef);
System.out.println(0345);
}
原码反码补码
正负约定:0表示正,1表示负
假设字长为8位,8位二进制表示一个数。00001100 (12)
字长最高位(从右往左)表示正负号,引入符号位之后,将数字位变成符号位
即0,0001100(原码表示)
之所以引入补码,是因为一旦二进制用补码表示,则符号位与数值位可以一起参与运算。并且保证结果正确。
原码->补码
对于一个正数的原码表示,它的原码表示就是它的补码表示。
对于一个负数的原码表示,转换规则如下:
- 原码的符号位不变,其余各位取反(0->1,1->0);
- 末尾+1;
-12 1,0001100(原码) 1,1110011(取反) -> 1,1110100(补码)
-12在内存中就是以补码形式存在的。
补码转原码
原码和补码互为补码。
对补码求补,就是求补码的原码。
0的表示
0的原码:
正0(0,0000000)
负0(1,0000000)
0的补码:
正0(0,0000000)
负0(1,0000000 -> 1,1111111 + 1 -> 00000000)【进位直接丢掉】
故在补码中,0只有一种表示方法 0,0000000
1,0000000:(为了不浪费)规定指定字长的补码表示中,最高位为1,其余各位都是0,让该补码多表示一个负数,值为 -2^(字长-1),在这里,字长为8,即值为-128
PS:8位字长表示范围是-127~+127