C语言操作符 小结
2017-10-19 01:18
429 查看
刚接触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+5 : 下标为5,元素地址
arr 的两个操作数是 arr 和 5 , 缺一不可
2).()函数调用操作符
函数名 是 一个地址
eg:Add(a,b) ()有三个操作数 ,函数至少有一个操作数:函数名
3).访问一个结构的成员
. 结构体 . 成员名 s.age=20; strcpy(s.name,"小强");
-> 结构体指针 -> 成员名 p->age=20;strcpy(p->name,"小强");
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+5 : 下标为5,元素地址
arr 的两个操作数是 arr 和 5 , 缺一不可
2).()函数调用操作符
函数名 是 一个地址
eg:Add(a,b) ()有三个操作数 ,函数至少有一个操作数:函数名
3).访问一个结构的成员
. 结构体 . 成员名 s.age=20; strcpy(s.name,"小强");
-> 结构体指针 -> 成员名 p->age=20;strcpy(p->name,"小强");