1、>> 向右位移
2、<< 想左位移
3、>>>算数右移
1、正数的原码、反码补码都是一样的
2、负数的反码=他的原码符号位不变,其他位取反
3、负数的补码=他的反码+1;负数的反码=负数的补码-1;
4、0的反码,补码都是0;
5、java中没有无符号数,换言之,java中的数都是有符号的;
6、在计算机运算的时候,都是以补码的方式来进行运算的,*****
7、当我们看运算结果时,要看他的原码。 *****(!!!)
1、按位与& :两位全为1,结果为1,否则为0;
2、按位或| :两位有一个为1,结果就为1.
3、异或 ^ :一个为1,一个为0,结果就为1,否则为0.
4、取反 :就是取反就行,全部取反,反码的时候,符号位是不变的。
import java.util.Scanner;//简单的文本扫描器
public class Change{
public static void main(String[] args){
System.out.println(2&3);
// 运算都是按照补码运算的,所以先得到2的补码,因为不管是什么运算都是按照 补码进行运算的。
// 2的默认类型是int,4个字节,1个字节8个bit,它的原码00000000 00000000 00000000 00000010
// 正数三码合一,再算3的原码: 00000000 00000000 00000000 00000011,再做与运算。
// 00000000 00000000 00000000 00000011
// 00000000 00000000 00000000 00000010 运算后
// 00000000 00000000 00000000 00000010 是补码,但是我们最后看的是原码,因为符号位是0,为
// 正数,所以三码合一。因此结果就是2.
System.out.println(~-2);//结果是1。
/*
-2的原码:10000000 00000000 0000000 00000010
反码: 11111111 11111111 11111111 11111101 //反码的符号位不变,其他位取反
: +1
补码 11111111 11111111 11111111 11111110 //求到补码的时候才能进行相应的运算
取反 00000000 00000000 00000000 00000001 //取反的时候全部取反。
最后的结果看的是运算后补码的原码,最后的补码是正数,因此我们就可以三码合一。
*/
System.out.println(~2);//结果是-3。
/*
2的原码:00000000 00000000 00000000 00000010 正数的三码合一
2的补码:00000000 00000000 00000000 00000010 补码=反码+1 反码=补码-1
进行运算:
11111111 11111111 11111111 11111101 这是运算后的补码
最后的结果要看的是原码:我们先求反码:
反码: 11111111 11111111 11111111 11111100
再求原码:(这里对原码再次取反):10000000 00000000 00000000 00000011
*/
}
}
戒骄戒躁