逻辑右移:右移后左边添加0
算术右移:右移后添加的位与原数的符号位相同
算术左移和逻辑左移的效果相同,算术右移和逻辑右移的效果不同
在C语言中,对于移位操作执行的是逻辑左移和算术右移,不过对于无符号类型,所有的移位操作都是逻辑的。
所以要相对一个有符号数执行逻辑右移,那么可以先将它强制类型转换为无符号类型
。
按位与:二进制位都为1则为1,不同则为0
按位或:只要又一个为1,则为1
按位异或:对应的两个数相同则为0,不同则为1
case:交换两变量的值,但不另外定以变量
方法1:
当a和b的值太大的时候,两个数加起来很容易溢出
方法2:
注意sizeof()是一个操作符,不是函数,它的返回值类型是unsigned int(%u表示) ,且sizeof里面的表达式不参与运算,如下:
逻辑与操作符:只要有一个0,则结果为0,故输出为1 2 3 4
逻辑或操作符:只要又一个1,则结果为1,故输出为1 3 3 4
在表达式计算时,各种整形首先要提升为int类型(只有char和 short),char为有符号的char
如何进行整形提升呢:
无符号的:直接在被截断的前面补0
有符号的:最高位是0则补0,最高位是1则补1
如:
会输出c,因为前两个都会整形提升,都不会为原来的值
小的转换为大的,精度低的转换为精度高的