前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C语言学习入门之操作符详解(上)

C语言学习入门之操作符详解(上)

原创
作者头像
Yolo112
发布2023-11-21 11:10:45
2940
发布2023-11-21 11:10:45
举报
文章被收录于专栏:爱学c语言爱学c语言

1. 操作符的分类

算术操作符

移位操作符

位操作符

赋值操作符

单目操作符

关系操作符

逻辑操作符

条件操作符

逗号表达式

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

2. 算术操作符

代码语言:txt
复制
+ - * / %(加法,减法,乘法,取余,取模)
  1. 代码演示:#include<stdio.h> int main() { float b = 7 / 2; float c = 7.0 / 2; printf("%f\n", b); printf("%f\n", c); return 0; }

运行结果:

注意:对于 / 操作符如果两个操作数都为整数,执行整数除法,而只要有浮点数执行的就是浮点数除法

  1. 代码演示:
代码语言:c
复制
#include<stdio.h>
int main()
{
	int a = 7 % 2;
	float b = 7 % 2;
	printf("%d\n", a);
	printf("%d\n", b);
	return 0;
}

运行结果:

由结果可知:变量的类型使用错误的话,结果也是错误的

还要注意:

除了 % 操作符之外,其他的几个操作符可以作用于整数和浮点数

% 操作符的两个操作数必须为整数,返回的是整除之后的余数

3. 移位操作符

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

  • 3.1 左移操作符移位规则:左边抛弃、右边补0。 整数是 int 型,占4个字节,有32位表示。其中最高位表示符号,0为正,1为负整数。 函数printf打印的是整数的原码

操作符对整数操作的流程:

(1)先将整数的原码转换成反码

(2)反码 +1转换成补码

(3)最后对整数的补码进行操作

(4)操作结束后,将操作后的补码 -1 转换成反码

(5)将反码转换成最终的原码

正数左移一位:

代码演示:

代码语言:c
复制
#include<stdio.h>
int main()

{
	
	int a = 2;// 00000000 00000000 00000000 00000010 2的补码
	int b = a << 1;//操作的补码二进制位,a本身结果不变
	printf("%d\n", a);// 2
	printf("%d\n", b);// 4
	return 0;
}

分析:

运行结果:

结果表明分析是正确的,且正数左移一位相当于乘2,负数分析的思路相同,需要注意负数原码反码补码之间的关系。

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

代码语言:c
复制
intnum=10;
num>>-1;//error
  • 3.2 右移操作符分为逻辑移位和算术移位 逻辑移位:左边用0填充,右边丢弃 算术移位:左边用原该值的符号位填充,右边丢弃 右移操作符采用逻辑移位还是算术移位,取决于电脑编译器正数右移一位(算术移位):代码演示:
代码语言:c
复制
int main()
{
	int a = 5;
	int b = a >> 1;
	printf("%d\n", a);//打印-5
	printf("%d\n", b);// -3
	return 0;
}

分析:

00000000 00000000 00000000 00000101 5的二进制补码

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

00000000 00000000 00000000 00000010 右移后的补码

右移后的补码就是右移后的原码 2

运行结果:

4. 位操作符

位操作符:

& 按位与 相同为1,相异为0

| 按位或 有1为1,全0为0

^ 按位异或 相同为0,相异为1

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

代码演示:

代码语言:c
复制
#include<stdio.h>
int main()
{	
	int a = 1;
	int b = -2;
	int c = a & b;
	int d = a | b;
	int e = a ^ b;
	printf("%d\n", c);
	printf("%d\n", d);
	printf("%d\n", e);
	return 0;
}

分析:

00000000 00000000 00000000 00000001 1的补码

11111111 11111111 11111111 11111110 -2的补码

代码语言:txt
复制
按位与:相同为1, 相异为0
代码语言:txt
复制
00000000 00000000 00000000 00000000 0的补码 原码表示0
代码语言:txt
复制
按位或: 有1为1, 全0为0
代码语言:txt
复制
11111111 11111111 11111111 11111111 -1的补码 原码表示-1
代码语言:txt
复制
按位异或: 相同为0, 相异为1

11111111 11111111 11111111 11111111 -1的补码 原码表示-1

运行结果:

(https://developer-private-1258344699.cos.ap-guangzhou.myqcloud.com/column/article/9832409/20231121-127d153a.png?x-cos-security-token=m9ILzxIp5oTzuEaX7fInnq8LiU82MWhac66a86472c9065073bef835dab0a22d1uH5qyNWmuVGljqIapO0UCFe6fnfC1oBEQewdkK_bgcgk0RXsgTjDcIPnvG4gXRxTRTE5E5P89-dvpn-z4dbGkohAudqA7vTiCYO9hB2KXfEVg8JPVcgzpSV7HiJpZ6VIxd_hNbA-i6US_jpTyEmN3xQanCRgyfq9_oezY7lGlcVpRj-ZBlCofj4a98HSWh3l1KcJvrsWK_SI5KnQYB6K0XraSmDpWsINgAEc7VrTyrb5-ETY0QCuNy_DmQIayycJAsoS8eLnHghtchsIcWjuyB97yxb_5ZaLo_21HwrKN4SVVOVAYy3n8-v8nkbU4OX5l0SyRnWwjxqur6xR91EBi1oFfU4FrFyAQ4VyHqlTqAQoNuof2HAM2-5EUTFQ2tvcf8y47Jix3d8X_F37bahXNA&q-sign-algorithm=sha1&q-ak=AKIDjulsn1whvKCV4-vf7ipo2m-m-fbSMxqcTgyxZK8nvfoTNBMyfLNeebq2F7vUJp5S&q-sign-time=1700536011%3B1700543206&q-key-time=1700536011%3B1700543206&q-header-list=host&q-url-param-list=x-cos-security-token&q-signature=75e7cf87f993225335e864756d57a03c1fea75bc)

结果表明分析的很正确

注意:数据在内存中始终是以二进制存放的。

数值是以补码表示的。

正整数,符号位为0,原码=反码=补码。

负整数,原码转化为反码:符号位为1不变,其余位按位取反;

反码转化为补码:反码+1。

5. 赋值操作符

赋值操作符就是能够重新赋值

注意:条件语句中,if(a==10) 易错被写成赋值:if(a=10),这时条件为真,语句将执行。为了避免错误,可写成 if(10==a),数值10不能被赋值,写成赋值时会报错。

复合赋值符:

+=

代码语言:txt
复制
-=
代码语言:txt
复制
*=
代码语言:txt
复制
/=
代码语言:txt
复制
%=
代码语言:txt
复制
>>=
代码语言:txt
复制
<<=
代码语言:txt
复制
&=
代码语言:txt
复制
|=
代码语言:txt
复制
^=
代码语言:c
复制
int  x = 0;
x = x +10;
x+=10;//复合赋值

其他的运算符也是这样的,这样写比较简便。

总结

本篇详细整理了前四种操作符,整理复习的同时也希望能帮到各位刚接触c的朋友们,下期是另外六种操作符的详解。

代码语言:txt
复制
我正在参与2023腾讯技术创作特训营第三期有奖征文,组队打卡瓜分大奖!

邀请人:“王晨爱创作”

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 操作符的分类
  • 2. 算术操作符
  • 3. 移位操作符
  • 4. 位操作符
  • 5. 赋值操作符
    • 总结
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档