1. 关于位操作运算符的初识:
在这之前,C语言中,八进制和十六进制的表示方法为:
int m = 010;定义八进制变量
int n = 0x10;定义十六进制变量
printf("%o\n",m);输出八进制变量
printf("%x\n",n);输出十六进制变量
C语言提供了6个位操作运算符,它们只能作用于整数操作数。
& 安位与(AND) 将2个数转化为2进制,当相同位置上有1个为1,则结果为1
| 安位或(OR) 当2个数相同位置均为1时,结果才为1
^ 安位异或(XOR) 当2个数相同位置的值不一样时候,结果为1,否则为0
<< 左移
>> 又移
~ 安位求反(一元运算符) 按位取反
2. 关于原码、反码、补码的认识:
正数的反码和补码都是和原码相同的。
负数的反码是将原码除符号位之外的各位求反
负数的补码是将其反码的末位加一
采用补码的好处:
1) 计算机中数都是用补码来存储的,由于无符号类型和有符号的整数补码是其本身,则补码主要为负数设计
2) 采用补码,可以是负数的符号位参与运算,从而方便的用加法实现减法
3. 关于运算符优先级的认识:
运算符 | 结合性 |
() [] -> . | 自左至右 |
! ~ ++ -- + - * (type) sizeof | 自右至左 |
/ * % | 自左至右 |
+ - | 自左至右 |
<< >> | 自左至右 |
< <= > >= | 自左至右 |
== != | 自左至右 |
& | 自左至右 |
^ | 自左至右 |
| | 自左至右 |
&& | 自左至右 |
|| | 自左至右 |
?: | 自左至右 |
= += -= *= /= %= &= ^= |= <<= >>= | 自右至左 |
, | 自右至左 |