位运算:

用于对整数类型(int, char, long等)(double和float类型不可用) 变量中的某一位(bit), 或者若干位进行操作。比如:

 

1) 判断某一位是否为1

2) 只改变其中某一位,而保持其他位都不变

 

C/C++语言中有六种位运算符来进行位运算操作(操作补码):

  &      按位与(双目)

  |      按位或(双目)

  ^      按位异或(双目)

  ~      按位非(取反)(单目)

  <<      左移(双目)

  >>      右移(双目)

"&"运算符:

通常用来将某变量中某些位清0且同时保留其他位不变

也可以用来获取某变量中的某一位

 

例如,如果需要将int型变量n的低8位全置变成0,而其余位不变,则可以执行:

n = n & 0xffffff00; 

n &= 0xffffff00;

如果n是short类型的,则只需执行:

n &= 0xff00;

 

例如,判断一个int型变量n的第7位(从右往左,从0开始数)是否为1?

只需看表达式“n & 0x80”的值是否等于0x80即可。

0x80:  1000 0000

"|"运算符:

按位或运算通常用来将某变量中的某些位置1且保留其他位不变。

 

例如,如果需要将int型变量n的低8位全置成1,而其余位不变,则可以执行:

n |= 0xff;

0xff: 1111 1111

"^"运算符:

按位异或运算通常用来将某变量中的某些位取反,且保留其他位不变

 

例如,如果需要将int型变量n的低8位取反,而其余位不变,则可以执行:

n ^= 0xff;

0xff: 1111 1111

 

136. Single Number 解题记录中用运用到"^"运算符来进行解题。

"<<"运算符:

表达式:

a << b

的值是:将a各二进位全部左移b位后得到的值。左移时,高位丢弃,低位补0a的值不因运算而改变

实际上,左移1位,就等于是乘以2,左移n位,就等于是乘以2n而左移操作比乘法操作快得多。

">>"运算符:

表达式:

a >> b

的值是:将a各二进位全部右移b位后得到的值。右移时,移出最右边的位就被丢弃。a的值不因运算而改变。

对于有符号数,如long,int,short,char类型变量,在右移时,符号位(即最高位)将一起移动,并且大多数C/C++编译器规定,如果原符号位为1,则右移时高位就补充1,原符号位为0,则右移时高位补充0。

实际上,右移n位,就相当于左操作数除以2n,并且将结果往小里取整。

 

-25 >> 4 = -2

-2 >> 4 = -1

18 >> 4 = 1

posted on 2018-03-08 21:16  宵夜在哪  阅读(185)  评论(0编辑  收藏  举报