1.左移,当左移的位数超过该数值类型的最大位数时,编译器会用左移的位数去模类型的最大位数,按余数进行位移。丢弃最高位,0补最低位。左移相当于乘,左移一位相当于乘2,左移两位相当于乘4,即左移位数乘于2的n次方。
如:
int i = 1,j=0x80000000;//设int为32位;
i=i<<33;//33%32=1 左移1位,i变成2
j=j<<33;//33%32=1 左移1位,j变成0,最高位被丢弃
2.右移,对于有符号整数,比如int类型 ,会保持符号位不变,符号位向右移动后,正数的补0,负数补1,即汇编语言中的算数右移,但是移动的位数超过类型长度时,会取余数,然后移动余数个位。右移相当于除,右移一位除以2,右移两位除以4,即右移位数除以2的n次方。
如:
int i = 0x80000000;
i = i>>1;//i的值不会变成0x40000000,而是oxc0000000
<<左位移运算:5<<1,将00000101左移一位,变成00000010,是10D。如:5<<4 == 5乘以2的4次方,值为80。
>>右位移运算:5>>1,将00000101右移一位,变成00001010,是2D。如:5>>4 == 5除以2的4次方,值为0。
//0X表示十六进制,0表示八进制。
//二进制计算:2的0次方+2的1次方+2的2次方+···+2的N次方。
//与运算:两真为真,两假为假,真假为假。
//或运算:两真为真,两假为假,真假为真。