• 一个二进制位可记录某种对象的开关状态

  • 位反运算符"~"

 ~ 0101 0101
 = 1010 1010
unsigned char s=0x55; 	s=~s

在实际应用中,位反运算可以将操作数中所有状态位同时进行反制。
例如,一个无符号字符型变量s,用s来记录八盏电灯的开关状态,对变量s进行位反运算,就可以将八盏电灯中亮着的电灯关闭,不亮的灯开启。C++原程序中没有办法书写二进制,通常我们将二进制转化为十六进制

  • 位与运算符"&"
         0011 0011
      &  0000 1111
      =  0000 0011

位与运算符是双目运算符,参与运算的两个数都为1则结果为1,否则结果为0

unsigned char s;	s & 0x2	0000 0010

	   bbbb bbbb			操作数s,b表示0或1
	&  0000 0010			检测倒数第二位状态的掩码
							运算结果:保留倒数第二位,其他位变成0
	=  0000 00b0			如果该结果等于0,则倒数第二位的状态为0
							如果该结果不等于0,则倒数第二位的状态为1				
  • 位或运算符 “|”
     0011 0011
   | 0000 1111
   = 0011 1111

位或运算符也是一个双目运算符,参与运算的两个数字,只要有一个为1,则结果为1.

unsigned char s;	s | 0x2

  bbbb bbbb			操作数s,b表示0或1
| 0000 0010			将倒数第二位状态置1的掩码
= bbbb bb1b			运算结果:将倒数第二位置成1,其他位不变
  • 异或运算符"^"
  0011 0011
^ 0000 1111
= 0011 1100

如果两位相同,则结果为0;两位不同,则结果为1

  • 左移运算符"<<"
unsigned char s =0x33;	s<<2
		0011 0011			八位操作数
	<<  2					左移两位
	= (00)1100 1100		左移结果:高2位移除,底两位补0
  • 右移运算符">>"
unsigned char s=0x33;	s>>2
		00011 0011			8位无符号数
	>>  2					右移2位
	=   0000 1100(11)		右移结果:底2位移除,高两位补0

C++位运算
只有整形:char、short、int、long可以位运算

相关文章:

  • 2022-12-23
  • 2021-12-31
  • 2021-07-25
  • 2022-12-23
  • 2021-05-14
  • 2021-05-23
猜你喜欢
  • 2022-01-05
  • 2021-09-20
  • 2021-12-21
相关资源
相似解决方案