基础
一、进制转换
1.1二进制转十进制
1.2十进制转二进制
例题:将十进制234转换成八进制数是 352
【解析】 (3)8^2+(5)8^1+(2)*8^0=234;
二、原码,补码,反码
2.1原码
[+1]原 = 0000 0001
[-1]原 = 1000 0001
2.2反码
正数的反码是其本身
[+1] = [00000001]原 = [00000001]反
负数的反码是在其原码的基础上, 符号位不变,其余各个位取反.
[-1] = [10000001]原 = [11111110]反
2.3补码
正数的补码就是其本身
[+1] = [00000001]原 = [00000001]反 = [00000001]补
在反码的基础上+1
[-1] = [10000001]原 = [11111110]反 = [11111111]补
注意:计算补码+1 满2进1
三、左移m<
左移
●左移运算符<<
●👉使指定值的所有位都左移规定的次数
●左移m<<n,代表把数字m在无溢出的前提下乘以2的n次方
右移
●右移运算符>>
●👉 使指定值的所有位都右移规定的次数
●右移m>>n 代表把数字m除以2的n次方,原来是正数的还是正数,负数还是负数
●注意,如果是单数,也就是二进制末位为1,则结果是将m除以2的n次方的整数商
无符号右移
无符号右移运算符>>>
👉同右移,但是结果全变正数
详细分析
<<表示左移,不分正负数,低位补0;
注:以下数据类型默认为byte-8位
左移时不管正负,低位补0
正数:r = 20 << 2
20的二进制补码:0001 0100
向左移动两位后:0101 0000
结果:r = 80
负数:r = -20 << 2
-20 的二进制原码 :1001 0100
-20 的二进制反码 :1110 1011
-20 的二进制补码 :1110 1100
左移两位后的补码:1011 0000
反码:1010 1111
原码:1101 0000
结果:r = -80
>>表示右移,如果该数为正,则高位补0,若为负数,则高位补1;
注:以下数据类型默认为byte-8位
正数:r = 20 >> 2
20的二进制补码:0001 0100
向右移动两位后:0000 0101
结果:r = 5
负数:r = -20 >> 2
-20 的二进制原码 :1001 0100
-20 的二进制反码 :1110 1011
-20 的二进制补码 :1110 1100
右移两位后的补码:1111 1011
反码:1111 1010
原码:1000 0101
结果:r = -5
>>>表示无符号右移,也叫逻辑右移,即若该数为正,则高位补0,而若该数为负数,则右移后高位同样补0
正数: r = 20 >>> 2
的结果与 r = 20 >> 2 相同;
负数: r = -20 >>> 2
注:以下数据类型默认为int 32位
-20:源码:10000000 00000000 00000000 00010100
反码:11111111 11111111 11111111 11101011
补码:11111111 11111111 11111111 11101100
右移:00111111 11111111 11111111 11111011
结果:r = 1073741819