C语言提供了丰富的操作符,有:算术操作符,移位操作符,位操作符,赋值操作符。让我们通读本篇来详细了解吧
前言:在我们程序编写领域,操作符给我们提供了很多的运算便利,但操作符琳琅满目,我们要怎样用好它们呢,下面就带你来熟悉熟悉这些多样的操作符。
操作符分类:
算术操作符 、移位操作符 、位操作符 、赋值操作符 、单目操作符 、关系操作符 、逻辑操作符 、条件操作符 、逗号表达式 、下标引用、函数调用和结构成员
1.算数操作符(+、--、*、%、/)
这里我们着重讲一下取余(模)%操作符和除法/操作符
#include<stdio.h>
int main()
{
//取余(模)、除法
int ret1 = 10 % 3;//取余(模),得到的结果是相除之后的余数
int ret2 = 10 / 3;//除法-得到的结果是商
printf("ret1=%d\nret2=%d\n", ret1, ret2);
//当/(除号)两端都是整数的时候,执行的是整数除法
//当两端只要有一个浮点数,执行的就是浮点数的除法
double ret = 10.0 / 3;
printf("%lf\n", ret);
return 0;
}
2.移位操作符(左移<< 和 右移>>)
这里注意!!!
移位操作符的操作数只能是整数,整数在内存中存的是补码,但最后输出的,也就是我们看到的,是原码。
(1)左移
#include<stdio.h>
int main()
{
//2.移位操作符
//左移
int a = 5;
//把a在内存中存储的二进制位向左移动2位
int b = a << 2;
printf("%d\n", b);
printf("%d\n", a);
}
计算演示:
(2)右移
分为算数右移和逻辑右移,具体是哪种右移取决于编译器。
算数右移:右边丢弃,左边补原来的符号位(负数右移几位左边就添几个1)
逻辑右移:右边丢弃,左边补0
(常见的编译器都是算数右移)
#include<stdio.h>
int main()
{
int a = 5;
int b = a >> 2;
printf("%d\n", b);
return 0;
}
3.位操作符
我们直接上代码
#include<stdio.h>
int main()
{
int a = 3;
int b = -5;
int x = a & b;
int y = a | b;
int z = a ^ b;
printf("%d %d %d", x, y, z);
return 0;
}
(1)按位与&
相同为1,不同为0
(2)按位或
只要有1则为1,两个同时为0才为0
(来个例题)
不能创建临时变量(第三个变量),实现两个数的交换
第一种,采用算数操作符来解决
#include<stdio.h>
int main()
{
int a = 3, b = 5;
printf("交换前:a=%d b=%d\n", a, b);
a = a + b;//a+b=8
b = a - b;//此时的a=8,b还是5,则b=8-5=3,也就是之前的a
a = a - b;//次时的a还是8,而b已经赋值为3,所以这时的a=8-3=5,也就是之前的b
printf("交换后:a=%d b=%d\n", a, b);
return 0;
}
但是这种方法不够完美,当a很大,b也很大的时候,则放不进整型里面,存在溢出问题,不能解决所有问题。那么我们就来看下第二种方法:使用异或
(相同的异或为0,任何数与0异或还是原的数)
#include<stdio.h>
int main()
{
int a = 3, b = 5;
printf("交换前:a=%d b=%d\n", a, b);
a = a ^ b;
b = a ^ b;//相当于a^b^b=a
a = a ^ b;//相当于a^b^a(此时的b=a)=b
printf("交换后:a=%d b=%d\n", a, b);
return 0;
}
但是这个方法的可读性不高,也存在缺陷,如果你有更好的方法记得告诉博主哦!
4.赋值操作符
(1)=,没什么好讲的
这里要提一点,连续赋值(不提倡),但要注意的是等号两边不能同时为常量
(2)复合赋值符
+= :a=a+b可以写成a+=b
-= :a=a-b可以写成a-=b
*= :a=a*b可以写成a*=b
下面以此类推
/= 、%= 、>>= 、<<= 、&= 、|= 、^=
好啦,操作符详解的上篇今天就到这了,敬请期待下篇!!!
到此这篇关于C语言各种操作符透彻理解上篇的文章就介绍到这了,更多相关C语言 操作符内容请搜索编程学习网以前的文章希望大家以后多多支持编程学习网!
本文标题为:C语言各种操作符透彻理解上篇
基础教程推荐
- C语言基础全局变量与局部变量教程详解 2022-12-31
- C语言 structural body结构体详解用法 2022-12-06
- C利用语言实现数据结构之队列 2022-11-22
- C++中的atoi 函数简介 2023-01-05
- 一文带你了解C++中的字符替换方法 2023-07-20
- C++详细实现完整图书管理功能 2023-04-04
- C++使用easyX库实现三星环绕效果流程详解 2023-06-26
- 详解c# Emit技术 2023-03-25
- C/C++编程中const的使用详解 2023-03-26
- 如何C++使用模板特化功能 2023-03-05