一、位移
1.0、位移基本概念
这部分比较简单,相信大家已经很熟悉。
1.1、位移负数和超过32,64等的大数字位数的处理
java中位移运算,移位的位数并不一定是位移符号后面的数字,准确的说是该数字的二进制表达式的最低5或者6个位所表示的值。所以最大值是31或者63。
移位运算,真正的只能作用于int和long,在java中分别是32位和64位表示。 我们可以对byte,char,short进行位移操作,这些类型位移运算的时候会转换为int类型。
为了防止移位的值过大而没必要,所以采用只看移位数的二进制表达式的后5位或者6位。其中5位是对int进行移位,6位是对long型移位。而高于这些位数的字节都会被舍弃。
所以移位正数的值相当于,移位的位数%(取模)32或者64.(对正数如此)
如 33 100001 结果为1
33对应int是32位 取模就是1,所以移动33和移动1是相同。
移动负数的位数即移动 二进制表达式的后5位或者6位。
如 -1 111111 结果相当与移动31位和63位
二、与(&)、或(|)、非(~)、异或(^)
与(&)
两个操作数中位都为1,结果才为1,否则结果为0
int a=15;
int b=2;
System.out.println("a 与 b 异或的结果是:"+(a^b));
运行结果
a 和b 与的结果是:128
下面分析这个程序:
“a”的值是129,转换成二进制就是10000001,而“b”的值是128,转换成二进制就是10000000。根据与运算符的运算规律,只有两个位都是1,结果才是1,可以知道结果就是10000000,即128。
或(|)
两个位只要有一个为1,那么结果就是1,否则就为0
int a=129;
int b=128;
System.out.println("a 和b 或的结果是:"+(a|b));
运行结果
a 和b 或的结果是:129
下面分析这个程序段:
a 的值是129,转换成二进制就是10000001,而b 的值是128,转换成二进制就是10000000,根据或运算符的运算规律,只有两个位有一个是1,结果才是1,可以知道结果就是10000001,即129。
非(~)
如果位为0,结果是1,如果位为1,结果是0
int a=2;
System.out.println("a 非的结果是:"+(~a));
异或(^)
两个操作数的位中,相同则结果为0,不同则结果为1
int a=15;
int b=2;
System.out.println("a 与 b 异或的结果是:"+(a^b));
运行结果
a 与 b 异或的结果是:13
分析上面的程序段:a 的值是15,转换成二进制为1111,而b 的值是2,转换成二进制为0010,根据异或的运算规律,可以得出其结果为1101 即13。