操作符——算术操作符、移位操作符、位操作符
算术操作符:+、-、*、/、%;
注:% 操作符的两个操作数必须是整数。
移位操作符:<< 左移操作符、 >> 右移操作符。
int main()
{
int a = 2;
//把a的二进制位向左移动一位。
int b = a >> 1;
printf("%d", b);
return 0;
}
a的二进制位:00000000000000000000000000000010;向左移动 一位后,最左边的0溢出,舍弃,最右边空缺一位补零,变成00000000000000000000000000000100;也就是b的值,换算成10进制等于4.
左移操作符特点:左边溢出的丢弃,右边补齐相应的零。
int main()
{
int a = 10;
//把a的二进制位向有移动一位。
int b = a << 1;
printf("%d", b);
return 0;
}
右移操作分为算术右移和逻辑右移。对于算术右移,右边溢出的丢弃,左边补的是原符号位;而逻辑右移,右边溢出的丢弃,左边补的是0。
注:负整数在进行移位运算的时候使用的是补码,移位完成后,在根据得到的新的补码算出源码,得到结果。正整数的原反补码相同。无论是正数还是负数,进行移位运算后,不会改变原数,如上面代码中的a的值不会变,得到的只有b的值。
位操作符 “&”:按位与; “|”:按位或; “^”:按位异或。其中按位的“位”指的是二进制位,按照二进制的位来进行相应计算。位操作符的操作数必须是整数。
& 计算规则:有零为零,全一为一。
int main()
{
int a = 3, b = 5, c;
c = a & b;
return 0;
}
a=3,二进制表示为:00000000000000000000000000000011,b=5,二进制表示为00000000000000000000000000000101;按位与之后得到00000000000000000000000000000001,结果是0。
| 计算规则:全零为零,有一为一。
^ 计算规则:相同为零,相异为一。所以两个相同的数异或得零,任何数字与零异或都得数字本身。