位运算符和赋值运算符

浪尽此生 提交于 2020-03-03 18:17:47

位运算符

位运算只能对整数进行,可以是整数型变量也可以是被识别为整数类型的字面量。位运算是对该整数实际存储的二进制串的二进制位进行操作,可以进行6种位运算:

运算符 作用
& 按位与
按位或
^ 按位异或
~ 按位取反
<< 左移
>> 右移

位运算都不改变操作数本身的值,而是位运算表达式本身的值为进行位运算之后的值,例如:

char a = 0B00101101;
char b = 0B10100110;
char c = a & b;	// c == 0B00100100
char d = a | b;	// d == 0B10101111
char e = a ^ b;	// e == 0B00100100
char f =  ~a;	// f == 0B11010010
char g =  a << 2;	// g == 0B10110100,低位补0
char h =  a >> 2;	// h == 0B00001011,高位补0
char gg = b << 2;	// gg == 0B10011000,低位补0
char hh = b >> 2;	// hh == 0B11101001,高位补1

左移运算,低位一定补0。右移运算,如果是signed类型则补符号位,unsigned类型则补0,例如:

unsigned char b = 0B10100110;
char hh = b >> 2;	// hh == 0B00101001,高位补0
// 虽然b和上面的代码中二进制串相同,但这里b被当作unsinged类型,补0而不是1

如果给出的移位位数为负数,不会反向移位,而是将此负数的二进制串(实际为补码)转化为unsigned正整数再移动相应位数,例如:

unsigned char b = 0B10100110;
char hh = b >> -2;	// -2的二进制串为0xFE,对应unsigned整数为254即右移254位,最终结果为0B00000000

赋值运算符

赋值运算符最简单的就是"=",将右边的值赋值给左边的变量,或者用于初始化语句中。C/C++除了有最基本的赋值运算符之外还有扩展的赋值运算符:

= a = b
+= a = (a+b)
-= a = (a-b)
*= a = (a*b)
/= a = (a/b)
%= a = (a%b)
&= a = (a&b)
|= a = (a|b)
^= a = (a^b)
<<= a = (a<<b)
>>= a = (a<<b)

赋值运算符的左侧必须是可修改的值,也就是变量。对一个常量使用赋值运算符则会报错:不可修改的左值。

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!