写在前面的话:
刚接触C语言操作符时候,感觉挺容易的,越学越感觉难,感觉里面学问挺多的。
1.算数操作符:+ - * / %
% //必须两边同为整数
/ //左右两边有一个为浮点数,则商为浮点数
2.移位操作符
//1)左移操作符 <<
左边抛弃,右边补0;// 000000001
(左0抛弃) // 0|000000010 (右边补0)
// 2)右移操作符 >>
1,算数移位
左边 :补符号位 (正数 > 0;负数 > 1);右边,丢弃
2,逻辑移位
左边补0;右边丢弃
//补充: 关于 “原码” “反码” “补码”
正数: “原码” “反码” “补码”均相等
负数:“原码” 为该数的二进制序列
“反码” 符号位为“1”,其余部分,按位取反
“补码” 符号位为“1”,其余部分,按位取反,而后+1;即 “反码” +1
3.位操作符(移位操作符 结合使用)
1)
& 按位与 有0为0,全1为1
| 按位或 有1为1,全0为0
^ 按位异或 相同为0,相异为1
//eg:
int a = 1; // 001
int b = 2; // 010
a&b; // 000
a|b; // 011
a^b; // 011
4.赋值操作符
5.复合操作符
+= -= *= /= %= >>= <<= &= |= ^=
eg:
a>>=1 //即 a=a>>1
6.单目操作符
// ! - + & sizeof ~ -- ++ * (类型)
1),“!” 逻辑反操作 假变真,真变假
2),“ & ”取地址 int a= 0; &a;
3),“sizeof” 操作数的类型长度 以字节为单位 sizeof(int) = 4 ; sizeof(char) = 1;
4),“~” 对一个数的二进制 按位取反
eg:
0 //00000000 0 的 原码,补码,反码
//11111111 (~0的)补码
//11111110 (~0的)反码
//补码 = 反码 + 1,即,反码 = 补码 - 1
~0 //10000001 (-1)
5),“++” 前置++,先++再运算,后置++,先运算再++
6),强制转换类型
eg :
int a = 0;
a = (int)3.14
//!!! 括号在类型上,强制转换类型,会导致数字精度缺失
7.关系操作符
> >= <
<= != ==
8.逻辑操作符
&& //逻辑与 一个假为假,两个真为真
|| //逻辑或 一个真为真,两个假为假
//区分 逻辑与 和 按位与,逻辑或 和按位或
eg :
1&2 //0
1&&2 //1
1|2 //3
1||2 //1
//注:在程序运行过程中,“&&”若前面有0,后面则不再运算,直接取0(假); “||”若前面有非0,后面则不再运算,直接取1(真)
9.条件操作符
exp1 ? exp2 : exp3
eg:
{
if (a>5)
b=3;
else
b=-3;
}
//转换为:
b=a>5?3:-3
10.逗号表达式
表达式: 值属性&类型属性
从左至右依次执行,结果为最后一个表达式结果
11.下标引用、函数调用 和 结构成员
1).
[ ]//操作数:一个数组名+一个索引值
*(arr+5)=5;
//arr+5 : 下标为5,元素地址
//arr 的两个操作数是 arr 和 5 , 缺一不可
2).
()函数调用操作符
函数名 是 一个地址
eg:
Add(a,b);
//()有三个操作数,函数至少有一个操作数:函数名
3).
.访问一个结构的成员
. 结构体
s.age=20;
strcpy(s.name,"小强");
-> 结构体指针
-> 成员名
p->age=20;
strcpy(p->name,"小强");