【C语言】操作符

本文详细介绍了C语言中的各种操作符,包括算数操作符如+、-、*、/和%,位操作符如<<、>>,以及赋值、关系、逻辑和条件操作符。还特别讨论了左移和右移操作在不同情况下的行为,以及如何通过指针和结构体成员进行访问。
摘要由CSDN通过智能技术生成

系列文章目录

【C语言】函数
【C语言】选择语句和循环语句
【C语言数据类型,变量和常量】
【C语言】整形和浮点型在内存中的存储
【C语言】数组



一、操作符分类

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

1.算数操作符

+   -   *  /  %

 ‘+’,‘-’,'*'和日常使用的逻辑一致,操作数可以是整形和浮点型;
 C语言中的除法分为整数除法和浮点数除法;

1.当除法操作符两边的操作数都是整型类型时,执行的是整型除法;
2.当除法操作符两边的操作数有一个是浮点数时,会执行浮点数除法;

#include <stdio.h>
int main()
{
	int x = 5;
	int y = 2;
	double z = x / y;
	printf("%lf\n", z); // 2.000000
	z = x * 1.0 / y;
	printf("%lf\n", z);//2.500000
	z = (double)x / y;
	printf("%lf\n", z);//2.500000
	return 0;
}

 要注意的是,‘%’操作符的两个操作数必须是整形,返回的是余数;

2.移位操作数

<<左移操作符
>> 右移操作符

注:移位操作符的操作数只能是整数。

 左移和右移操作符操作的是二进制位;

#include <stdio.h>
int main()
{
	int n = 10;
	0000 0000 0000 0000 0000 0000 0000 1010 --补码(正整数的原码,反码,补码相同)
	n = n << 1;
	0000 0000 0000 0000 0000 0000 0001 0100 -- 20
	左移操作符:左边抛弃、右边补0
	printf("%d", n);
	return 0;
}

在这里插入图片描述
 右移有两种方式:

逻辑移位:左边用0填充,右边丢弃
算术移位:左边用原该值的符号位填充,右边丢弃

#include <stdio.h>
int main()
{
	int n = -10;
	1000 0000 0000 0000 0000 0000 0000 1010 --原码
	1111 1111 1111 1111 1111 1111 1111 0101 --反码
	1111 1111 1111 1111 1111 1111 1111 0110 --补码
	n = n >> 1;
	逻辑右移:
	0111 1111 1111 1111 1111 1111 1111 1011 -- 一个很大的正数 2^31-1-4
	算数右移:
	1111 1111 1111 1111 1111 1111 1111 1011 -- -5
	printf("%d", n);
	return 0;
}

在这里插入图片描述
 由此可以确定,在我的编译器下,右移执行的是算数右移;

3.位操作数

 & 按位与
 | 按位或
 ^ 按位异或

注:他们的操作数也必须是整数;

 &:如果两个操作数对应二进制位都为1才为1,否则就是0

#include <stdio.h>
int main()
{
	int a = -1;
	1111 1111 1111 1111 1111 1111 1111 1111 
	int b = 10;
	0000 0000 0000 0000 0000 0000 0000 1010
	int c = a & b;
	1111 1111 1111 1111 1111 1111 1111 1111 
	0000 0000 0000 0000 0000 0000 0000 1010  
	0000 0000 0000 0000 0000 0000 0000 1010  --10
	对应二进制位都为1才为1,否则就是0
	printf("%d", c);
	return 0;
}

在这里插入图片描述
 |:如果两个操作数对应二进制位有一个1则为1,全是0才为0

#include <stdio.h>
int main()
{
	int a = -1;
	1111 1111 1111 1111 1111 1111 1111 1111 
	int b = 10;
	0000 0000 0000 0000 0000 0000 0000 1010
	int c = a | b;
	1111 1111 1111 1111 1111 1111 1111 1111 
	0000 0000 0000 0000 0000 0000 0000 1010  
	1111 1111 1111 1111 1111 1111 1111 1111  -- -1
	对应二进制位有一个1则为1,全是0才为0
	printf("%d", c);
	return 0;
}

在这里插入图片描述

 ^:如果两个操作数对应二进制位不同则为1,相同为0

#include <stdio.h>
int main()
{
	int a = -1;
	1111 1111 1111 1111 1111 1111 1111 1111 
	int b = 10;
	0000 0000 0000 0000 0000 0000 0000 1010
	int c = a ^ b;
	1111 1111 1111 1111 1111 1111 1111 1111 
	0000 0000 0000 0000 0000 0000 0000 1010  
	1111 1111 1111 1111 1111 1111 1111 0101  -- -11
	对应二进制位相同为0,不同则为1
	printf("%d", c);
	return 0;
}

在这里插入图片描述

4.赋值操作数

=  += -= *= /= %= &= |= ^= <<= >>=

 赋值操作符是一个经常使用的操作符,要注意‘=’是赋值,‘==’是判断是否相等
 复合赋值操作符可以简化代码,提高代码可读性;

#include <stdio.h>
int main()
{
	int a = 0;
	a += 2;
	a *= 3;
	a /= 5;
	....
	return 0;
}

5.单目操作符

 ! 逻辑反操作
 - 负值
 + 正值
 & 取地址
 sizeof 操作数的类型长度(以字节为单位)
 ~ 对一个数的二进制按位取反
 – 前置、后置–
 ++ 前置、后置++
 * 间接访问操作符(解引用操作符)
 (类型) 强制类型转换

!      逻辑反操作
#include <stdio.h>
int main()
{
	int flag = 0;
	C语言中,0为假,非0为真
	if (flag)
	{
		printf("hehe");
	}
	if (!flag)
	{
		printf("haha");
	}
	return 0;
}

在这里插入图片描述
 当然如果你想使用bool值来测试的话,也是可以的;C语言要使用bool值,要引一个头文件stdbool.h
在这里插入图片描述
 ‘+’和‘-’用来表示正负数,这个就不多说了;

&      取地址
#include <stdio.h>
int main()
{
	int a = 0;
	int* p = &a;
	printf("%p\n", p);
	return 0;
}
sizeof是一个操作符,不是函数,因为sizeof的圆括号在一些情况下可以省略,而函数的圆括号不能省略
int main()
{
	int a = 0;
	printf("%d", sizeof a);
	return 0;
}

 ~ 按位取反操作符,在使用时会把符号位也取反,不要和反码搞混;


 前置++,是先++,后使用,表达式的值是++之后的值;
 后置++,是先使用,后++,表达式的值是++之前的值;
 同理前置–和后置–也一样;

* 解引用操作符
#include <stdio.h>
int main()
{
	int n = 0;
	int* p = &n;
	printf("%d", n);
	*p = 20;
	通过指针p,解引用修改n;
	printf("%d", n);
	return 0;
}

在这里插入图片描述

()强制类型转换
#include <stdio.h>
int main()
{
	double x = 12.3456;
	printf("%d", (int)x);
	//12
	return 0;
}

6.关系操作符

 >
 >=
 <
 <=
 != 用于测试“不相等”
 == 用于测试“相等”

注意关系操作符(==),不要在使用时写成赋值操作符(=)

7.逻辑操作符

 && 逻辑与
 || 逻辑或

 逻辑与要求表达式两边都为真,才为真,如果左边操作数为假,那右边的操作数就不会再看了,因为只要有一个为假,整体表达式就为假;
 逻辑或要求表达式两边至少一个为真才为真,如果左边为真,那右边的操作数就不会看了,因为只要有一个为真,整体表达式就为真;

8.条件操作符(三目操作符)

 exp1 ? exp2 : exp3

 如果表达式1成立,执行表达式2,表达式3不执行;如果表达式1不成立,执行表达式3,表达式2不执行;

#include <stdio.h>
用三目操作符求两数的较大值
int main()
{
	int a = 0;
	int b = 0;
	scanf("%d %d", &a, &b);
	int max = a > b ? a : b;
	printf("max");
	return 0;
}

9.逗号表达式

 exp1, exp2, exp3, …expN

 逗号表达式,就是用逗号隔开的多个表达式。
 逗号表达式,从左向右依次执行。整个表达式的结果是最后一个表达式的结果。

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

 [] : 下标访问操作符

int main()
{
	int arr[10] = { 0 };
	for (int i = 0; i < sizeof(arr)/sizeof(arr[0]); i++)
	{
		arr[i] = i;
		[]的两个操作数是arr和i
	}
	return 0;
}

 ( ) 函数调用操作符

#include <stdio.h>

int GetMid(int x, int y)
{
	return (x > y ? x : y);
}

int main()
{
	int a = 0, b = 0;
	scanf("%d %d", &a, &b);
	printf("%d", GetMax(a, b));
	return 0;
}

. 结构体.成员名
-> 结构体指针->成员名

#include <stdio.h>
typedef struct PeopleInfo
{
	char name[20];
	int age;
	char sex[5];
}PIF;

int main()
{
	PIF p = {"zhangsan", 20, "男"};
	PIF* pf = &p;
	printf("%s %d %s\n", p.name, p.age, p.sex);
	printf("%s %d %s\n", pf->name, pf->age, pf->sex);

}

在这里插入图片描述


总结

 好了,以上就是今天所讲的内容,如果对你有帮助,请点个赞吧。

Python网络爬虫与推荐算法新闻推荐平台:网络爬虫:通过Python实现新浪新闻的爬取,可爬取新闻页面上的标题、文本、图片、视频链接(保留排版) 推荐算法:权重衰减+标签推荐+区域推荐+热点推荐.zip项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全领域),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明(如有)等。答辩评审平均分达到96分,放心下载使用!可轻松复现,设计报告也可借鉴此项目,该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的。 【提供帮助】:有任何使用问题欢迎随时与我联系,我会及时解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 下载后请首先打开README文件(如有),项目工程可直接复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LRBORRR

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值