位移运算(左移,右移)

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次方。

//与运算:两真为真,两假为假,真假为假。

//或运算:两真为真,两假为假,真假为真。

猜你喜欢

转载自1160514291.iteye.com/blog/2308623