位运算符:
c语言中,位运算符主要是针对 int 类型和char类型数据而言的,不适合用于float,double,long,和void等其他复杂类型。优先级由高到低依次为:
~,>>,<<,&,^,|其中只有按位取反是单目运算符,其他都是双目运算符。
按位非运算~:将二进制的数字0变1,1变0,
按位与运算&:l两个操作对象均为1时,则该位结果为1,否则为0,即都为1,才是真,为1.
按位或运算符|:两个操作对象有一个为1时,结果为1,否则为0,即都为0才为0,
按位异或^:两个操作对象相异时,则结果为1,相同时为0,相异为真,为1,相同为假,为0
对位位运算符应该注意四点:
位逻辑运算符的操作数应该是整型数据
为了保证程序的可可移植性,操作数应使用十进制,八进制或者十六进制的表示形式,而不要使用二进制数的表示形式,这是因为二进制数的表示形式与
机器硬件支持紧密相关。
按位取反运算符仅对操作数取反码,不能直接求其补码,如果要求其某操作数的补码,应该先求出其反码,在运用增1运算对反码加1,使该操作数变为原操作数的补码。
位逻辑运算与前面介绍的逻辑运算有质的区别,位逻辑运算是按位进行运算的,而逻辑运算则是对整个数值按0和非零进行运算的,位逻辑运算要计算具体数值,而逻辑运算
只判断表达式的值是真还是假。
位移运算符:(结合性为自左向右)
a<<b,a向左移b位。
a>>b,a向右移b位。
注意:左移或右移时出现的空位应当补0
如果左移或右移的位数是负值,移位的最终结果为0值
如果参与移位运算的变量是有符号的整型变量,则应当将最左边的二进制当作符号位(负数用1补),并根据补码确定最终的结果。
赋值表达式
x=y==z+5,看起来很奇葩,但是应该是可以的。表示逻辑判断然后赋值给x.
1,赋值表达式也有类型自动转换
2,字符型变量赋值给整型时,高八位补0
3,整型赋值给字符型,只把低八位赋给字符变量,
大转小会丢失精度。
逗号运算符及其表达式:
表达式1,表达式2,先计算表达式1,然后再计算表达式2,最后结果为表达式2的计算结果。
逗号表达式时必须注意几点:
1,逗号表达式有可能降低程序的可读性,不利于养成良好的编程习惯,建议少用或者不用
2,通常是要分别求逗号表达式内各表达式的值,并不一定要求整个表达式的值
3,并不是所有出现逗号的地方都组成逗号表达式,如在变量说明中,函数参数列表中逗号只是用做各变量之间的分隔符
支持条件表达式,a?b:c 注意类型的转换
sizeof运算符用于计算计算机中对象占用的字节。sizeof(e)e可以是任何类型或者表达式,优先级高。