C语言操作符

操作符

分类:

  • 算术操作符
  • 移位操作符
  • 位操作符
  • 赋值操作符
  • 单目操作符
  • 关系操作符
  • 逻辑操作符
  • 条件操作符
  • 逗号表达式
  • 下标引用、函数调用和结构成

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 
来源:CSDN 
原文:https://blog.csdn.net/qq635075803/article/details/79757619 
版权声明:本文为博主原创文章,转载请附上博文链接!
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值