操作符
分类:
- 算术操作符
- 移位操作符
- 位操作符
- 赋值操作符
- 单目操作符
- 关系操作符
- 逻辑操作符
- 条件操作符
- 逗号表达式
- 下标引用、函数调用和结构成
1.算术操作符
+ - * / % 即加,减,乘,除,取模五个操作
- 除了 % 操作符之外,其他的几个操作符可以作用于整数和浮点数。
- 对于 / 操作符如果两个操作数都为整数,执行整数除法。而只要有浮点数执行的就是浮点数除法。
- % 操作符的两个操作数必须为整数。返回的是整除之后的余数。
- 运算符有优先级,与数学相似
- 对于除法来说,整数被整除还是整数(舍弃小数),小数运算优先考虑使用double
//9 -> int
//9.0 -> double
//9.0f -> float
double ret =9/10;
输出ret=0.00000
- 两个操作数类型不同时,触发隐式类型转换,转换成相同类型和精度.
- 0不能作为除数,如果是一个常量0,编译器会检测到并直接报错;若是变量0,编译器检测不到则导致程序崩溃
- 不能对0求模%,效果和除/0一样
- C语言中字符串之间不能用"+"拼接字符串
2.位移操作符
左移操作符<<
右移操作符>>
位移操作符是针对二进制的操作
- 左移操作的规则:最高位舍弃,整体左移,最高位补1
- 右移操作的规则:1.逻辑右移:最左侧补0; 2.算数右移:最左侧补符号位
用最高位这个bit位表示符号±,0表示正数,1表示负数
左移一位相当于乘*2,右移一位相当于除/2 - 位移位数过多或位数为负数都是未定义行为
3.位操作符
& 按位与
| 按位或
^ 按位异或
注:他们的操作数必须是整数。
- 按位与&:两个数都为1,结果为1,否则为0
- 按位或|:两个数都为0,结果为0,否则为1
- 按位取反~:对整形类型的操作数的补码进行求补操作,针对这个数字,0变1,1变0
- 异或^:如果两个数字相同,结果为1,相异结果为0.任何数与其本身异或结果为0,任何数与0异或结果为其本身.(无论多少个数相异或,只要出现与前几位重复的数,值就会一步一步返回若全部重复会归零)
4.赋值操作符
=
复合赋值操作符:
+=
-=
*=
/=
%=
.>>=
<<=
&=
|=
^=
- 赋值表达式的结合性(即求值顺序)是从右向左:a=x=y+10等同于x=y+10;a=x;不建议写连续赋值,影响代码可读性
5.单目操作符
! 逻辑反操作
- 负值
+ 正值
& 取地址
sizeof 操作数的类型长度(以字节为单位)
~ 对一个数的二进制按位取反
– 前置、后置–
++ 前置、后置++
* 间接访问操作符(解引用操作符)
(类型) 强制类型转换
- ! 逻辑反操作:1取反为0,0取反为1,真取反为假,假取反为真,可用于if while语句等中的执行
- &获取操作数的地址,取得变量的地址,可以赋值给指针
- sizeof是判断它操作数的类型长度,字节是它的单位
sizeof(int) //int不能去掉括号
sizeof a;//不建议这样写
sizeof(a);
sizeof(a=b-2);
这些都是正确的写法
- sizeof求长度当中关于数组名:
int arr[]={0};
int a=0;
a=sizeof(arr);// 在这里表示的是这里的数组的大小,单位是字节,数组名表示整个数组
a=&arr //&取出的是整个数组的地址,数组名表示整个数组
a=&arr+1;//&取的是跳过整个的数组的地址,而arr+1是第二个元素的地址
// 当函数中arr作为首元素地址传入指针,sizeof(arr)计算的是指针的类型长度,所以无论arr是整型还是字符型其在同一个设备上的大小是一样的
- ++/- -自增和自减操作,又分为前置自增和后置自增.
C语言中需要注意1.如果不考察两个表达式的返回值,++n和++n等价
2.如果取返回值,++n取自增后的值,n++取自增前的值
//++n
n+=1;
return n;
//n++
int tmp=n;
n+=1;
return tmp;
- 间接访问操作符*(解引用操作符/提领)
- (类型) 为强制类型转换操作符:这种操作利大于弊,可以解决部分问题但是会导致精度或数据丢失,原因包含转换过程发生截断等.
6.关系操作符
’ > '大于
’ >= '大于等于
’ < '小于
’ <= '小于等于
!= 用于测试等于
==用于测试不等于
这些关系运算符比较简单,没什么可讲的,但是我们要注意一些运算符使用时候特别是循环判定条件时的陷阱。
警告: 在编程的过程中== 和=不小心写错,导致的错误
7.逻辑操作符
&& 逻辑与
|| 逻辑或
-
注意区分逻辑与&&和按位与&,逻辑或 || 和按位或 | 的区别
1&2----->0
1&&2---->1
1|2----->3
1||2---->1 -
短路求值:
对于逻辑与 && 来说,左侧表达式为假,那么右侧表达式不求值
对于逻辑或 || 来说,左侧表达式为真,那么右侧表达式不求值
8.条件操作符
exp1?exp2:exp3
- C语言中的唯一一个三目运算符,exp1表示判定条件,结果若为真,则执行exp2,若为假则执行exp3
9.逗号表达式
- 整个表达式的值是最后一个逗号之后的值,逗号运算符是所有运算符中运算级别最低的.一般情况下不建议使用.
10.下标引用、函数调用和结构成员
1.[ ] 下标引用操作符
- arr[4]相当于*(arr+4)相当于4[arr]
2.( ) 函数调用操作符 接受一个或者多个操作数:第一个操作数是函数名,剩余的操作数就是传递给函数的参数
3.访问一个结构的成员
-> 结构体指针->成员名
. 结构体 . 成员名
- 关于 . 和 -> 的用法,引用一段caco学长的代码帮助理解
#include<stdio.h>
#include<Windows.h>
struct poppin //定义结构体类型,名为poppin
{
int popper; //定义结构体成员
char blf[10];
char sex[6];
};
void test(struct poppin*ps)
{
strcpy(ps->blf,"KOD");//此处ps等价于(*p).
}
int main()
{
struct poppin s; //定义结构体变量
test(&s);
printf("%s", s.blf);//输出结构体中的成员blf
system("pause");
return 0;
}
---------------------
作者:caco9527
来源:优快云
原文:https://blog.csdn.net/qq635075803/article/details/79757619
版权声明:本文为博主原创文章,转载请附上博文链接!