从0开始学c语言-18-操作符详解

本文详细介绍了C语言中的各种操作符,包括算数、移位、位操作、赋值、单目操作符以及逻辑操作符等,并通过实例解析其用法。适合C语言初学者学习,帮助理解操作符的工作原理。
摘要由CSDN通过智能技术生成

本人0基础开始学编程,我能学会的,你也一定可以,学会多少写多少。

下载安装请从官网入手,社区版本即可,这里主要使用的软件是VS2019,图标如下。

 上一篇:从0开始学c语言-过渡-函数递归、循环语句、数组练习_阿秋的阿秋不是阿秋的博客-CSDN博客

在开始之前,希望大家先看看我之前写的操作符文章,这里给上链接。(因为有重复的内容,细节可能不会在这里提及。)

从0开始学c语言-07-认识一下操作符、原码和反码和补码_阿秋的阿秋不是阿秋的博客-CSDN博客

目录

1·算数操作符

2·移位操作符

左移操作符

右移操作符

补充

3·位操作符

练习1

第一种写法

第二种写法

异或的结论

练习2

画图示意

代码思路

优化

4·赋值操作符

5·单目操作符

! 逻辑反操作

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

括号与数组类型

数组传参与sizeof

sizeof括号中的表达式不参与运算

~  对一个数的二进制按位取反

和它相似的

应用练习

 前置、后置的--、++

 &取地址和*  间接访问操作符(解引用操作符)

sizeof和它们组合的应用

 6·关系操作符

7·逻辑操作符

&&与&、||与|

提示:

8·条件操作符(三母操作符)

9·逗号表达式

小用途

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


操作符

1·算数操作符

+   -   *   /   %

从0开始学c语言-07-认识一下操作符、原码和反码和补码_阿秋的阿秋不是阿秋的博客-CSDN博客

详细的看上面那篇文章,这里只给上结论。

1. 除了 % 操作符之外,其他的几个操作符可以作用于整数和浮点数。
2. 对于 / 操作符如果两个操作数都为整数,执行整数除法。而只要有浮点数执行的就是浮点数除法。
3. % 操作符的两个操作数必须为整数。返回的是整除之后的余数。

2·移位操作符

<<  左移 >>  右移

移位操作符的操作数只能是整数(不能<<2.3),我们这里所指的移动是移动补码的二进制位!!!

详细解释看从0开始学c语言-07-认识一下操作符、原码和反码和补码_阿秋的阿秋不是阿秋的博客-CSDN博客

左移操作符

左移原则:左边不要,右边补0

右移操作符

右移分为两种:

1.逻辑移位:左边补0、右边丢弃

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

计算机系统中的右移以算术移位为主


对于移位运算符,不要移动负数位,这个是标准未定义的。

例如:  

int aqiu = 10;  

num>>-1;  //这是不可以的哦!


补充

 变量b储存a变量移位后的结果,a本身不会改变。

我们把移位放在判断条件中,可以看到a本身依旧不会改变。

3·位操作符

&:按位与(有0为0)

| :按位或(有1为1)

^:按位异或(相同为0,不同为1)

注意:

1.和移位运算符一样,他们的操作数也必须是整数。也就是说不能&2.3

2.和移位运算符一样,位操作符也是对补码进行操作。

3·和移位运算符一样,别的变量储存它按位后的结果或者放在判断条件中,它本身不变

练习1

不创建第三个变量,交换两个变量的值。

第一种写法

int main()
{
	int a = 3;
	int b = 5;
	printf("a=%d,b=%d", a, b);
	a = b - a;
	b = b - a;
	a = a + b;
	printf("a=%d,b=%d", a, b);
	return 0;
}

这样虽然可以,但是如果a和b都很大的话会溢出

第二种写法

int main()
{
	int a = 3;
	int b = 5;
	printf("a=%d,b=%d", a, b);
//异或的结果同原来的其中一个值异或能得到另外一个值
	a = b ^ a; 
//这个a相当于密码
	b = b ^ a; 
//b去异或这个密码就能得到a,相当于b=b^b^a,b^b=0,0^a=a,b=a
	a = a ^ b; 
//a去异或这个密码就能得到b
	printf("a=%d,b=%d", a, b);
//用ab异或的结果可以知道ab哪些位不同,然后用a与结果异或,相同保留不同取异得到b
	return 0;
}

异或的结论

1· 任何两个相同的数 异或 为0
2· 0和任何数字 异或 是它本身

练习2

求一个整数储存在内存中的二进制1的个数

思路:一个数和1按位与的话,只有它也为1才能得到1。然后不断右移这个数,验证有多少个1。</

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值