一、JAVA04747 自考复习
1.原码、反码、补码(首数字为符号位:整数为0,负数为1)
&:如果两个数为负数,先补位在进行运算(整数的补码为本身)
l:有1为1,否则为0(计算负数时,结果符号为1需要进行逆操作转为源码输出结果)
^:相同为0,不同为1
-4 原码:1000 0100 反码(除符号位,按位取反):1111 1011 补码(反码+1):1111 1100
5 原码:0000 0101 反码(除符号位,按位取反):1111 1010 补码:整数补码为本身(0000 0101)
-4|5
1111 1101:符号为1转源码
1111 1100(反码-1)
源码:1000 0011 -3
2.位移运算符 :右移(>>)、左移(<<)、无符号右移(>>>)
A<
A>>B代表乘A÷2的B次方
2.1.左移(<<):右边空出的位用0填补高位,左移溢出则舍弃高位。
int a=8<<2;
8:源码 0 000 1000 左移后:0 010 0000
int b=-8<<2;
-8:源码(+8源码改符号位为1):1 000 1000 反码:1 111 0111 补码(反码+1,等于二为零 在先前进一):1 111 1000
整体左移:1 110 0000 逆运算(整体-1,等于-1为1 在先前进一):1 101 1111 取反:1 010 0000 int b=-32;
2.2.右移(>>):右边空出的位用0或者1填补,整数用0,负数用1。低位右移溢出则舍弃该位。
int a=8>>2;
8:源码 0 000 1000 右移后:0 000 0010
int b=-8>>2;
-8:源码(+8源码改符号位为1):1 000 1000 反码:1 111 0111 补码(反码+1,等于二为零 在先前进一):1 111 1000
整体右移:1 111 1110 逆运算(整体-1,等于-1为1 在先前进一):1 111 1101 取反:1 000 0010 int b=-2;
2.3.无符号右移(>>>) :正数与右移规则一样,负数的无符号右移,在相应的补码位移所得,在高位补0即可
正数:例如4>>>2
4源码:0 000 0100
与4>>2的运算相同,结果也为1
负数:例如-4>>>2
首先写出-4的二进制数,因为是负数所以最高位为1
-4源码:1 000 0100
然后写出-4补码:保证符号位不变,其余位置取反加1(从右往左遇到第一个1,然后剩下的全部取反就是了)
4反码:1 111 1011
-4补码:1 111 1100(补码)
右移2位: 在高位补0
右移2位:0 011 1111
结果为:63