【C语言】操作符详解

news/2025/4/2 15:29:02/

在这里插入图片描述
每天一篇博客,卷死各位。

文章目录

  • 前言
    • 1. 算术操作符
    • 2. 移位
      • 进制位的表示
      • 移位操作符
        • 1. 》--左移操作符
        • 2. 《--右移操作符
    • 3.位操作符
    • 4.赋值操作符
    • 5.单目操作符
    • 6.关系操作符
    • 7. 逻辑操作符
    • 8.条件操作符
    • 9.逗号操作符
    • 总结


前言

在c语言学习中操作符尤为重要,而今天我们则是对操作符的详解以及介绍。我们会详细讲解移位操作符 位操作符的使用和特点。

1. 算术操作符

算术操作符中有 1.+ 2. - 3. *4. / 5. %
算术操作符中最重要的也是%和/


int main()
{printf("%lf\n", 10 / 3.0);//5printf("%d\n", 10 % 2);//0int a = -5;return 0;
}
  1. / 除法 - 得到的是商
  2. 除法操作符的两个操作数都是整数的话,执行的是整数除法
  3. 除法操作符的两个操作数只要有一个浮点数,执行的是小数除法
  4. % 取模(取余)得到的是余数
  5. 取模操作符的操作数必须是整数

这也是算术操作符,也是最基本的操作符之一。

2. 移位

进制位的表示

  1. 进制也就是进位制,是人们规定的一种进位方法。 对于任何一种进制—X进制,就表示某一位置上的数运算时是逢X进一位。

  2. 十进制是逢十进一,十六进制是逢十六进一,二进制就是逢二进一,以此类推,x进制就是逢x进位。

  3. 二进制数有两个特点:它由两个基本数字0,1组成,二进制数运算规律是逢二进一。

  4. 四进制是以4为底数的进位制,以 0、1、2 和 3 四个数字表示任何实数。

  5. 七进制是以7为底数的记数系统。使用数字0-6。七进制小数通常都是循环小数,除非分母是七的倍数。有些小数可以用有限个数字来表示

  6. 八进制的基R=8=2^3,有数码0、1、2、3、4、5、6、7,并且每个数码正好对应三位二进制数,所以八进制能很好地反映二进制。

  7. 十进制,它的特点有两个:有0,1,2….9十个基本数字组成,十进制数运算是按“逢十进一”的规则进行的.

  8. 十二进制,长度单位一英尺等于12英寸,一先令等于12便士,就连足球比赛罚点球的英制长度也是12码。

  9. 十六进制数有两个基本特点:它由十六个字符0~9以及A,B,C,D,E,F组成(它们分别表示十进制数10~15),十六进制数运算规律是逢十六进一,即基R=16=2^4,通常在表示时用尾部标志H或下标16以示区别。

  10. 六十进制:古代人由于生产劳动的需要,要研究天文和历法,就牵涉到时间和角度了。因为历法需要的精确度较高,时间的单位小时,角度的单位度都嫌太大。必须进一步研究其小数。它们的小数都具有这样的性质︰使1/2,1/3,1/4,1/5,1/6等都能成为他的整数倍。以1/60作为单位,就正好具有这个性质。
    图片更好展示
    在这里插入图片描述
    在这里插入图片描述

移位操作符

1. 》–左移操作符

左移运算符是一个计算机用语。用来将一个数的各二进制位全部左移若干位。因为位运算比×用算快,所以可对一下代码进行优化,还可利用左移运算符计算a的第b个二进制位是什么。

int main()
{int a = 3;//00000000000000000000000000000011int b = a << 1;printf("%d\n", b);printf("%d\n", a);return 0;
}

而正数的原码反码补码都相同,而b=6(原码:0000000000000000000000000000110)相当于00011进一位。
同理,负数同样进一位。

int main()
{int a = -3;//10000000000000000000000000000011//11111111111111111111111111111100//11111111111111111111111111111101 - 补码//int b = a << 1;//11111111111111111111111111111010//11111111111111111111111111111001//10000000000000000000000000000110//11111111111111111111111111111010//10000000000000000000000000000101//10000000000000000000000000000110printf("%d\n", b);//-6printf("%d\n", a);//-3return 0;
}

这就是左移的全部内容。

2. 《–右移操作符

在这里插入图片描述

(重要的点:上面移位都只能移动整数,而浮点数不可取)

算术右移:算术右移需要考虑符号位,右移一位,若符号位为1,就在左边补1;否则,就补0。
所以算术右移也可以进行有符号位的除法,右移,n位就等于除2的n次方。
逻辑右移:逻辑右移,左边统一添0。

3.位操作符

位操作符就相对很简单M(注意的是所有的位的都是二进制)

  1. &
    数学逻辑符号
    &是一个数学逻辑符号,如:在歌曲中,张三&李四,表示此歌曲由张三与李四共同演唱。在数学逻辑中此符号也充分运用到,意思是与、和。&:在C语言中有两种意思,一种是取地址符,是单目运算符;另一种是位运算符,表示“按位与”,是双目运算符。a&b表示啊a和b按位进行与运算。&后面是个变量。每个变量对应一块存储空间。每个存储空间有一个编号,也就是地址,&变量名表示取出这个编,变量名表示取出这个编号所对应的存储空间里的值。
int c = a & b;//按位与//00000000000000000000000000000011 - 3的补码//10000000000000000000000000000101 //11111111111111111111111111111010//11111111111111111111111111111011 - -5的补码//00000000000000000000000000000011 - 3的补码//00000000000000000000000000000011
  1. I
    “|”是位运算符,表示“按位或”。按位或运算符“|”是双目运算符。其功能是参与运算的两数各对应的二进位相或。只要对应的二个二进位有一个为1时,结果位就为1。参与运算的两个数均以补码出现。
    用代码展示:
int c = a | b;//按位或/*11111111111111111111111111111011 - -5的补码00000000000000000000000000000011 - 3的补码11111111111111111111111111111011*/
  1. ^

c语言中^是异或运算符。先将两个整数化成二进制位数。在每个对应的位数中,只有两者的该位上一个是1或者0,而另一个的改为上必须是相反的,那么做该运算该位的结果就是1,否则结果就是0。
代码如下:

int a = 3;int b = -5;int c = a ^ b;//按位异或 - 对应的二进制位,相同为0,相异为1//11111111111111111111111111111011 - -5的补码//00000000000000000000000000000011 - 3的补码//11111111111111111111111111111000//11111111111111111111111111110111//10000000000000000000000000001000

用一个代码举例

#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;
}
参考代码:
//方法1
#include <stdio.h>
int main()
{
int num = 10;

4.赋值操作符

赋值操作符是一个很棒的操作符,他可以让你得到一个你之前不满意的值。也就是你可以给自己重新赋值。
这也是最简单的操作符了。
赋值操作符可以连续使用,比如:
int a = 10;
int x = 0;
int y = 20;
a = x = y+1;//连续赋值
这样的代码感觉怎么样?
那同样的语义,你看看:
x = y+1;
a = x;
这样的写法是不是更加清晰爽朗而且易于调试。
+=:连加。
-=连减等同于i–
*= 连乘
/=连除
%=连余数
<<= 左移

5.单目操作符

在这里插入图片描述

#include <stdio.h>
int main()
{
int a = -10;
int *p = NULL;
printf("%d\n", !2);
printf("%d\n", !0);
a = -a;
p = &a;
printf("%d\n", sizeof(a));
printf("%d\n", sizeof(int));
printf("%d\n", sizeof a);//这样写行不行?
printf("%d\n", sizeof int);//这样写行不行?
return 0;
}

6.关系操作符

在这里插入图片描述
这些关系运算符比较简单,没什么可讲的,但是我们要注意一些运算符使用时候的陷阱。
警告:
在编程的过程中== 和=不小心写错,导致的错误。

7. 逻辑操作符

&& 逻辑与
|| 逻辑或
这两个操作符是用于表示逻辑上的真假。到底是什么东西呢?
区分逻辑与和按位与
区分逻辑或和按位或

1&2----->0
1&&2---->1
1|2----->3
1||2---->1

逻辑与和或的特点
360笔试题

#include <stdio.h>
int main()
{
int i = 0,a=0,b=2,c =3,d=4;
i = a++ && ++b && d++;
//i = a++||++b||d++;
printf("a = %d\n b = %d\n c = %d\nd = %d\n", a, b, c, d);
return 0;
}
//程序输出的结果是什么?

在这里插入图片描述

8.条件操作符

exp1 ? exp2 : exp3

条件操作符(单目操作符)
1、固定格式:eg:((a>b)?(x):(y))
2、意思就是如果满足条件a>b,那么就返回x的值,否则就返回y的值
在这里插入图片描述
求两个数的较大值,条件操作符就可以派上用场了。

代码举例

#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>int main()
{int career = 6, identify = 9;int issue = ((career > identify) ? (250) : (666));printf("%d\n", issue);return 0;
}

9.逗号操作符

exp1, exp2, exp3, …expN

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

for (let i = 0, j = 9; i <= 9; i++, j--) {console.log(`a[${i}][${j}] = ${a[i][j]}`);
}

当你想要在期望一个表达式的位置包含多个表达式时,可以使用逗号运算符。这个运算符最常用的一种情况是:在 for 循环中提供多个参数。

逗号运算符与数组、对象和函数参数中的逗号含义完全不同。

总结

最后一个操作符还没学好,我会单独写一篇,谢谢大家关注。


http://www.ppmy.cn/news/24213.html

相关文章

jetson nano(ubuntu)安装ninja

文章目录安装环境安装环境 jetson nano 系统&#xff1a;4.6.1 安装re2c apt-get install re2c检查re2c是否安装成功 re2c --version ![在这里插入图片描述](https://img-blog.csdnimg.cn/847c19f15c2646bda44f6ae73b78509a.png#pic_center)下载ninja源代码 git clone https:/…

微信小程序 学生选课系统--nodejs+vue

系统分为学生和管理员&#xff0c;教师三个角色 学生小程序端的主要功能有&#xff1a; 1.用户注册和登陆系统 2.查看选课介绍信息 3.查看查看课程分类 4.查看课程详情&#xff0c;在线选课&#xff0c;提交选课信息 5.在线搜索课程信息 6.用户个人中心修改个人资料 7.用户查看…

【C++之容器篇】造轮子:模拟实现vector类

目录前言一、项目结构1. vector的简介2. 项目结构二、vector的底层结构三、默认成员函数1. 构造函数(1)无参构造函数2. 拷贝构造函数3. 析构函数4. 赋值运算符重载函数四、迭代器1. 普通对象的正向迭代器2. const 对象的正向迭代器五、容量接口1. size()2. capacity()3. reserv…

C++入门教程||C++ 数据类型||C++ 变量类型

C 数据类型 使用编程语言进行编程时&#xff0c;需要用到各种变量来存储各种信息。变量保留的是它所存储的值的内存位置。这意味着&#xff0c;当您创建一个变量时&#xff0c;就会在内存中保留一些空间。 您可能需要存储各种数据类型&#xff08;比如字符型、宽字符型、整型…

ccc-Logistic Regression-李宏毅(5)

文章目录Step 1: Function SetStep 2: Goodness of a FunctionStep 3: Find the best functionWhy not Logistic Regression Square ErrorDiscriminative v.s. GenerativeMulti-class Classification(3 Class)Limitation of Logistic RegressionCascading logistic regression…

【openGauss实战8】Schema的图文解读

&#x1f4e2;&#x1f4e2;&#x1f4e2;&#x1f4e3;&#x1f4e3;&#x1f4e3; 哈喽&#xff01;大家好&#xff0c;我是【IT邦德】&#xff0c;江湖人称jeames007&#xff0c;10余年DBA及大数据工作经验 一位上进心十足的【大数据领域博主】&#xff01;&#x1f61c;&am…

【RabbitMQ五】——RabbitMQ路由模式(Routing)

RabbitMQ路由模式前言RabbitMQ模式的基本概念为什么要使用Rabbitmq 路由模式RabbitMQ路由模式组成元素路由模式完整代码Pom文件引入RabbtiMQ依赖RabbitMQ工具类生产者消费者1消费者2运行结果截图前言 通过本篇博客能够简单使用RabbitMQ的路由模式。 本篇博客主要是博主通过官网…

【JavaScript】35_包装类与垃圾回收机制

10、包装类 在JS中&#xff0c;除了直接创建原始值外&#xff0c;也可以创建原始值的对象 通过 new String() 可以创建String类型的对象 通过 new Number() 可以创建Number类型的对象 通过 new Boolean() 可以创建Boolean类型的对象 但是千万不要这么做 包装类&#xff1…