C语言操作符
一、算术操作符
+ - * / %
除了%操作符只能用于int 型,剩余都可用在float 和int型
二、移位操作符
<<左移操作符:左边抛弃,右边补0。
>>右移操作符:
(1):逻辑移位:左边用0填充,右边丢弃。
(2):算术移位:左边用原该值的符号位填充,右边丢弃。
逻辑移位需要注意只可用于正数在负数中不适合(在计算机储存中32位比特位中第一位默认为符号位:正数为0,负数为1)。电脑中默认为算术移位
注意!!!!!对于移位运算符,不要移动负数位。
三、位操作符 (补码运算)
按位与& ;按位或|;按位异或^。
&:对应比特位都为1,按位与后对应比特位为1。其余都为0
|:对应比特位有一个为1,按位或后对应比特位为1,其余为0
^:对应比特位相同为0,不同为1。
eg:1和3的三种操作符计算
1的比特位:00000000 00000000 00000000 00000001
3的比特位:00000000 00000000 00000000 00000011
1&3:00000000 00000000 00000000 00000001
1|3: 00000000 00000000 00000000 0000000
1^3: 00000000 00000000 00000000 000000010
按位操作符计算的都是整数。
四、赋值操作符
只有=。
赋值操作符可以连续使用,eg:a=x=y+1;(1) x=y+1; a=x;(2)
大家可以看出来第二种比较好看一些,而且易于调试。
五、复合赋值符
+=(x=x+1); -=(x=x-1) ; 类似的还有*= /= %= >>= <<= &= |= ^=
这些操作符都可以达成复合的效果。
六、单目操作符
!:逻辑反操作; - + 正负值; &:取地址; sizeof :操作数的类型长度
~:对一个二进制按位取反; -- ++:前后置++ --; *:间接访问操作符
(类型):强制类型转换。
特别注意的是sizeof 这个操作符:
&数组名,Sizeof (数组名)不代表首元素地址,代表整个数组。除此之外所以数组名都是首元素地址。
arr+1 :跳过数组首地址
&arr+1: 跳过整个数组
七、关系操作符
< <= > >= !=(不相等) ==(相等)
特别注意if()括号中的判断语句用== 不是赋值语句中的等号。
八、逻辑操作符
逻辑与:&& 逻辑或||
给出一个逻辑也和或的特点:
int i=0,a=0,b=2,c=3,d=4;
i=a++&&++b&&d++;
I=a++||++b||d++;
Printf(“a=%d\n b=%d\n c=%d\n d=%d\n”,a,b,c,d)
两种运算下输出的答案有什么不同
进行&&时:输出为 1 2 3 4 当第一个a++为0时值为假后面运算不运算。
进行||时: 输出为 1 3 3 4 当第一个为0 ++b为1时值为真后面运算不运算。
九、条件操作符
exp1 ? exp2 : exp3
exp1 为判断式,解读为exp1为真时取值exp2,为假时取值exp2.
十、逗号表达式
逗号表达式,就是用逗号隔开的多个表达式。从左向右依次执行。整个表达式的结果是最后一个表达式结果。
十一、下标引用、函数调用和结构成员
1. 【】
操作数:一个数组名+一个索引值
eg:int arr【10】;//创建一个数组
2()
函数调用操作符:接受一个或者多个操作数:第一个操作数是函数名,剩余的操作数就是传递给函数的参数。
3:访问一个结构的成员
. 结构体.成员名
-> 结构体指针->成员名