c语言操作符总结(含代码举例)

操作符分类:

算术操作符

移位操作符

位操作符

赋值操作符

单目操作符

关系操作符

逻辑操作符

条件操作符

逗号表达式

下标引用、函数调用和结构成员

 

算术操作符

+ - * / %

/:如果要执行整数除法,必须保证两个数都是整数;如果要执行浮点数除法,两个数中至少一个是浮点数;

%:取模的两个数必须都是整数,返回的是整除之后的余数。

例:

#include<stdio.h>
int main
{
int a=10;
int b=3;
int c=a%b;//c为1,10对3取模余数为1
return 0;
}

移位操作符

<<左移操作符

>>右移操作符

 

左移操作符<<

左移操作符在函数中的表示方法如下:

int main()
{int a=1;//注意移位操作针对的不是十进制位而是二进制位
int b=a<<1;
printf(“%d\n”,b);
printf(“%d\n”,a);//注意a的值不会发生改变,输出为1
return 0;
}

a为1时,a的二进制位注意要表达为32位,即00000000000000000000000000000001,a向左移动一位,右边用0补位,移位后变为00000000000000000000000000000010,即1向左移动移位后变为2。

移位规则:左边抛弃,右边补0。(左移一位有乘二的效果,左移两位有乘四的效果。)

 

右移操作符>>

右移操作符在函数中的表示方法如下:

int main()
{int a=10;
int b=a>>1;
printf(“%d\n”,b);
printf(“%d\n”,a);
return 0;
}

右移运算分为两种:

1. 逻辑右移

左边用0填充,右边丢弃。

例如10的2进制位为00000000000000000000000000001010,右移后为00000000000000000000000000000101,即由10变为5,右移一位有除二的效果。

2. 算数右移

左边用原该值的符号位填充(正数补0,负数补1),右边丢弃。这种方法不会改变数的正负,具体采用哪种右移方法取决于编译器。

 

位操作符

位操作符有:

&  //按位与(只要有一个为0就为0,两个都为1才为1)

|  //按位或(有一个为1即为1)

^  //按位异或(相同为0.相异为1)

按位与的表示方法如下:

#include<stdio.h>
int main
{
int a=-1;
int b=6;
int c=a&b;
//11111111111111111111111111111111
//00000000000000000000000000000110
//00000000000000000000000000000110(补码,正数的原码补码反码相同)
printf(“%d”,c);
return 0;}

上述按位与后的输出c经二进制计算后为6。注意按位与计算要先将两个整数转换为二进制序列再根据规则写出补码,再由补码求得原码后计算出整数。

按位或的表示方法如下:

#include<stdio.h>
int main
{
int a=-1;
int b=6;
int c=a&b;
//11111111111111111111111111111111
//00000000000000000000000000000110
//11111111111111111111111111111111(补码)
//11111111111111111111111111111110(反码)
//10000000000000000000000000000001(原码)
printf(“%d”,c);
return 0;
}

计算出的结果为-1。

按位异或可以在不创建临时变量的条件下实现两个数的交换。

#include<stdio.h>
int main()
{
int a=10;
int b=20;
a=a^b;
b=a^b;
a=a^b;
printf(“a=%d b=&d\n”,a,b);
return 0;
}

赋值操作符

=

用来给之前不满意的值重新赋值。

int weight=120;//初始化

weight =89;//赋值

 

复合赋值符

+= //a=a+3等价于a+=3,其他运算符一样的道理,这样写更简洁

-=

*=

/=

%=

>>=

<<=

&=

|=

^=

 

单目操作符

! 逻辑反操作

- 负值

+ 正值

& 取地址

sizeof 操作数的类型长度(以字节为单位)

~ 对一个数的二进制按位取反(把1改成0,0改成1)

-- 前置、后置--

++ 前置、后置++

* 间接访问操作符(解引用操作符)

(类型)强制类型转换

!:真变成假,假变成真

#include<stdio.h>
int main()
{
printf(“%d\n”,!0);//1
return 0;
}

&:取地址操作符(可以对变量取地址,也可以对数组取地址,注意不能对常量取地址)

#include<stdio.h>
int main()
{
//int num=10;
//#//取num的地址
int arr[10]={0};
printf(“%p\n”,&arr);//数组的地址
printf(“%p\n”,arr);//数组首元素的地址
return 0;
}

sizeof:这是一个操作符而不是函数。即可以求变量的大小又可以求类型所创建变量的大小。

#include<stdio.h>
int main()
{
//int a=10;
//printf(“%d\n”,sizeof(a));//4
//printf(“%d\n”,sizeof(int));//4
int arr[10]={0};
printf(“%d\n”,sizeof(arr));//40,求数组总大小单位为字节
printf(“%d\n”,sizeof(int[10]));//40
return 0;
}

再来看一种sizeof的用法。

#include<stdio.h>
int main()
{
short s=3;
int a=10;
printf(“%d\n”,sizeof(s=a+4));//2,主要看短整型s,整形a不会影响s的类型
printf(“&d\n”,s);//3,sizeof括号内的表达式不参与运算,s的值不变
printf(“%d\n”,a);//10
return 0;
}

++:有前置和后置之分

#include<stdio.h>
int main()
{
int a =10;
//printf(“%d\n”,a++);//10,后置++,先使用a的值再++
//printf(“%d\n”,a);//11
int b=++a;
printf(“%d\n”,b);//11,前置++,a先自增再使用
printf(“%d\n”,a);//11
return 0;
}

*:间接访问操作符

#include<stdio.h>
int main()
{
int num=10;
int *p=#
*p;//通过p里面存的值找到它指向的内容(通过地址找到num)
return 0;
}

(类型)强制类型转换:

#include<stdio.h>
int main()
{
int a=(int)3.14;//double 类型转换为int类型
return 0;
}

关系操作符

>

>=

<

<=

!= 用于测试“不相等”

== 用于测试“相等”(判断时一定要用两个等号,不然会变成赋值操作)

注意:判断两个字符串,数组相等时不能用等号。

 

逻辑操作符

&& 逻辑与

|| 逻辑或

#include<stdio.h>
int main()
{
int a=10;
int b=-1;
//int c=a&&b;
//printf(“%d\n”,c );//1,逻辑与只看真假
int c=(a>2)||b;
printf(“%d\n”,c );//0,逻辑或一个假即为假
return 0;
}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值