C语言之操作符

news2024/10/5 10:58:42

目录

一、二进制

原码、反码、补码

二、移位操作符

位操作符

三、 逗号表达式

四、下标访问[]、函数调用()

五. 操作符的属性

整型提升

算术转换

六、总结


一、二进制

其实2进制、8进制、10进制、16进制是数值的不同表示形式而已。

其实10进制是生活中经常使用的,已经形成了很多尝试:

• 10进制中满10进1 

• 10进制的数字每⼀位都是0~9的数字组成其实⼆进制也是⼀样的  2进制中满2进1 

• 2进制的数字每⼀位都是0~1的数字组成那么1101就是⼆进制的数字了。

2进制转10进制

其实10进制的123表示的值是⼀百⼆⼗三,其实10进制的每⼀位是权重的,10进制的数字从右向左是个位、⼗位、百位....,分别每⼀位的权重是10^0 , 10^1 , 10^2 ... 

2进制和10进制是类似的,只不过2进制的每⼀位的权重,从右向左是:2^0, 2^1 , 2^2 ... 

10进制转2进制 

2进制转8进制

8进制的数字每⼀位是0~7的,0~7的数字,各⾃写成2进制,最多有3个2进制位就⾜够了,⽐如7的⼆ 进制是111,所以在2进制转8进制数的时候,从2进制序列中右边低位开始向左每3个2进制位会换算⼀ 个8进制位,剩余不够3个2进制位的直接换算。

2进制的01101011,换成8进制:0153,0开好头的数组,会被当做8进制。

2进制转16进制

16进制的数字每⼀位是0~9,a~f的,0~9,a~f的数字,各⾃写成2进制,最多有4个2进制位就⾜够了, 比如f的⼆进制是1111,所以在2进制转16进制数的时候,从2进制序列中右边低位开始向左每4个2进制位会换算⼀个16进制位,剩余不够4个⼆进制位的直接换算。

2进制的01101011,换成16进制:0x6b,16进制表示的时候前⾯加0x

原码、反码、补码

整数的2进制表示方法有三种,即原码、反码和补码 三种表示方法均有符号位和数值位两部分,符号位都是用0表示“正”,用1表示“负”,而数值位最高位的⼀位是被当做符号位,剩余的都是数值位。 正整数的原、反、补码都相同。 负整数的三种表示方法各不相同。 原码:直接将数值按照正负数的形式翻译成⼆进制得到的就是原码。 反码:将原码的符号位不变,其他位依次按位取反就可以得到反码。 补码:反码+1就得到补码。

对于整形来说:数据存放内存中其实存放的是补码

在计算机系统中,数值⼀律用补码来表示和存储。原因在于,使用补码,可以将符号位和数值域统⼀处理; 同时,加法和减法也可以统⼀处理(CPU只有加法器)此外,补码与原码相互转换,其运算过程是相同的,不需要额外的硬件电路。

二、移位操作符

左移操作符

<<左移操作符

移位规则:左边抛弃、右边补0

右移操作符

>>右移操作符

移位规则:首先右移运算分两种 

1.逻辑右移:左边用0填充,右边丢弃

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

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

位操作符

& //按位与 
| //按位或 
^ //按位异或 
注:他们的操作数必须是整数。

三、 逗号表达式

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

int main()
{
	int a = 1;
	int b = 2;      //a=12,        //b=13
	int c = (a > b, a = b + 10, a, b = a + 1);//逗号表达式 
	printf("%d", c); //13
	return 0;
}

四、下标访问[]、函数调用()

下标访问[]

int arr[10];//创建数组 
arr[9] = 10;//实⽤下标引⽤操作符。 
[ ]的两个操作数是arr和9。

函数调用() 

接受⼀个或者多个操作数:第⼀个操作数是函数名,剩余的操作数就是传递给函数的参数。

#include <stdio.h>
void test1()
{
 printf("hehe\n");
}
void test2(const char *str)
{
 printf("%s\n", str);
}
int main()
{
 test1(); //这⾥的()就是作为函数调⽤操作符。 
 test2("hello C");//这⾥的()就是函数调⽤操作符。 
 return 0;
}

五. 操作符的属性

C语言的操作符有2个重要0属性:优先级、结合性,这两个属性决定了表达式求值的计算顺序。

优先级

优先级指的是,如果⼀个表达式包含多个运算符,哪个运算符应该优先执行。各种运算符的优先级是不⼀样的。

3 + 4 * 5;

表达式 3 + 4 * 5 里面既有加法运算符( + ),又有乘法运算符( * )。由于乘法的优先级高于加法,所以会先计算 4 * 5 ,⽽不是先计算 3 + 4 。  

结合性 

如果两个运算符优先级相同,优先级没办法确定先计算哪个了,这时候就看结合性了,则根据运算符 是左结合,还是右结合,决定执行顺序。大部分运算符是左结合(从左到右执行),少数运算符是右结合(从右到左执行),比如赋值运算符( = )。

圆括号的优先级最高,可以使⽤它改变其他运算符的优先级。

其他操作符在使用的时候查看下面表格就可以了

整型提升

C语言中整型算术运算总是至少以缺省整型类型的精度来进行的。 为了获得这个精度,表达式中的字符和短整型操作数在使用之前被转换为普通整型,这种转换称为整型提升。

整型提升的意义:

表达式的整型运算要在CPU的相应运算器件内执行,CPU内整型运算器(ALU)的操作数的字节⻓度⼀ 般就是int的字节⻓度,同时也是CPU的通⽤寄存器的长度。因此,即使两个char类型的相加,在CPU执行时实际上也要先转换为CPU内整型操作数的标准长度。 通用CPU(general-purposeCPU)是难以直接实现两个8比特字节直接相加运算(虽然机器指令中 可能有这种字节相加指令)。所以,表达式中各种长度可能小于int长度的整型值,都必须先转换为 int或unsigned int,然后才能送⼊CPU去执行运算。

算术转换

如果某个操作符的各个操作数属于不同的类型,那么除⾮其中⼀个操作数的转换为另⼀个操作数的类 型,否则操作就⽆法进⾏。下⾯的层次体系称为寻常算术转换。

long double
double
float
unsigned long int
long int
unsigned int
int

如果某个操作数的类型在上面这个列表中排名靠后,那么首先要转换为另外⼀个操作数的类型后执行运算。  

六、总结

C 语言中一些常见操作符的总结:

算术操作符:

• +(加)

• -(减)

• *(乘)

• /(除)

• %(取模,用于整数)

关系操作符:

• <(小于)

• >(大于)

• <=(小于等于)

• >=(大于等于)

• ==(等于)

• !=(不等于)

逻辑操作符:

• &&(逻辑与)

• ||(逻辑或)

赋值操作符:

• = 以及复合赋值操作符如 +=、-=、*=、/= 等。

自增自减操作符:

• ++(自增)

• --(自减)

位操作符:

• &(按位与)

• |(按位或)

• ^(按位异或)

• <<(左移)

• >>(右移)

条件操作符(三目运算符):表达式 1? 表达式 2 : 表达式 3

这些是 C 语言中比较核心和常用的操作符,当然还有其他一些特殊用途的操作符。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1836893.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

docker容器中连接宿主机mysql数据库

最近要在docker中使用mysql数据库&#xff0c;首先考虑在ubuntu的镜像中安装mysql&#xff0c;这样的脚本和数据库都在容器中&#xff0c;直接访问localhost&#xff1a;3306&#xff0c;脚本很简单&#xff0c;如下&#xff1a; import pymysql# 建立数据库连接 db pymysql.…

港硕上岸鹅厂算法岗,谈谈感受和心得!

节前&#xff0c;我们组织了一场算法岗技术&面试讨论会&#xff0c;邀请了一些互联网大厂朋友、今年参加社招和校招面试的同学。 针对大模型技术趋势、算法项目落地经验分享、新手如何入门算法岗、该如何准备面试攻略、面试常考点等热门话题进行了深入的讨论。 总结链接如…

技术革新| 卓翼飞思受邀出席2024士兵智能装备与技术学术大会

6月14日&#xff0c;由中国兵器装备集团智元研究院/智元国家重点实验室、中国兵工学会主办的 “2024士兵智能装备与技术学术大会” 在杭州隆重召开。卓翼智能应邀出席本次大会&#xff0c;并发表了题为《新概念飞行器及多智能体集群仿真系统研究》的演讲报告。 本次大会以“智能…

常见的网络设备

引入 园区网络安全部署场景 1、路由器&#xff1a; 跨网段通信设备 。 2、交换机&#xff1a; 同网段或跨网段通信设备。 3、AntiDDoS &#xff1a; DDoS 防御系统&#xff0c;通常旁挂部署于网络出口处&#xff0c; 位于防火墙上游&#xff0c;用于减轻防火墙报文处理负担。 …

NocoBase调研

项目概述&#xff1a; nocobase是一个开源的无代码和低代码开发平台&#xff0c;允许用户快速部署私有、可控、易于扩展的系统。 NocoBase官网&#xff1a;NocoBase-开源、私有部署的轻量级无代码和低代码开发平台 核心特性&#xff1a; 强调NocoBase的数据模型驱动方法&am…

JVM 性能分析案列——使用 JProfiler 工具分析 dump.hprof 堆内存快照文件排查内存溢出问题

在 windows 环境下实现。 参考文档 一、配置 JVM 参数 配置两个 JVM 参数&#xff1a; -XX:HeapDumpOnOutOfMemoryError&#xff0c;配置这个参数&#xff0c;会在发生内存溢出时 dump 生成内存快照文件&#xff08;xxx.hprof&#xff09;-XX:HeapDumpPathF:\logs&#xff…

uniapp使用伪元素实现气泡

uniapp使用伪元素实现气泡 背景实现思路代码实现尾巴 背景 气泡效果在开发中使用是非常常见的&#xff0c;使用场景有提示框&#xff0c;对话框等等&#xff0c;今天我们使用css来实现气泡效果。老规矩&#xff0c;先看下效果图&#xff1a; 实现思路 其实实现这个气泡框的…

线代的学习(矩阵)

1.矩阵的乘法 矩阵实现满足&#xff1a;内标相等 矩阵相乘之后的结果&#xff1a;前行后列 需要注意&#xff1a;1.矩阵的乘法不具有交换律&#xff1a;AB!BA 2.矩阵的乘法满足分配律&#xff1a;A(BC) AB AC 抽象逆矩阵求逆矩阵 方法1.凑定义法、 方法2.长除法 数字型矩阵…

06文件和文件夹的操作

授课进程 一、文件操作 在操作的时候尽量选择Linux下面的/opt目录 使用ls -l 命令&#xff0c;相对简化的命令ll 在Linux中&#xff0c;ls -l是一个常用的命令&#xff0c;用于列出文件和目录的详细信息。下面是ls -l命令的一些常见选项和输出示例&#xff1a; ​ - 使用ls -…

【神经网络】图像的数字视角

文章目录 图像的数字视角引言直观感受内在剖析图像常用函数图像三维层次 经验总结 图像的数字视角 引言 在机器视觉和目标识别领域&#xff0c;需要处理的对象都是图像&#xff0c;但这些领域的模型都是针对数值进行训练的&#xff0c;那么图像和数值之间是什么关系呢?答案是…

玩转OurBMC第八期:OpenBMC webui之通信交互

栏目介绍&#xff1a;“玩转OurBMC”是OurBMC社区开创的知识分享类栏目&#xff0c;主要聚焦于社区和BMC全栈技术相关基础知识的分享&#xff0c;全方位涵盖了从理论原理到实践操作的知识传递。OurBMC社区将通过“玩转OurBMC”栏目&#xff0c;帮助开发者们深入了解到社区文化、…

shell学习记录

shell简介 参考博文1 参考博文2——shell语法及应用 参考博文3——vi的使用 在linux中有很多类型的shell&#xff0c;不同的shell具备不同的功能&#xff0c;shell还决定了脚本中函数的语法&#xff0c;Linux中默认的shell是 / b in/ b a s h &#xff0c;流行的shell有as…

分布式锁demo

分布式锁 在应用开发中&#xff0c;特别是web工程开发&#xff0c;通常都是并发编程&#xff0c;不是多进程就是多线程。这种场景下极易出现线程并发性安全问题&#xff0c;此时不得不使用锁来解决问题。在多线程高并发场景下&#xff0c;为了保证资源的线程安全问题&#xff…

论文解读《Revisiting Neural Retrieval on Accelerators》

论文链接&#xff1a;https://arxiv.org/pdf/2306.04039 一、摘要 信息检索和推荐应用中&#xff0c;检索任务是从大规模的语料库中找到一小部分相关的候选项。检索的关键组成部分是建模&#xff08;用户&#xff0c;物品&#xff09;的相似度&#xff0c;通常表示为两个学习…

TypeScript写好了,怎么运行啊!!!

环境搭建 Vs code Ctrlshiftp打开首选项—》打开工作区设置—》搜索Typescript 推荐开启的配置项主要是这几个&#xff1a; Function Like Return Types&#xff0c;显示推导得到的函数返回值类型&#xff1b;Parameter Names&#xff0c;显示函数入参的名称&#xff1b;Par…

搭建PHP开发环境:Linux篇

目录 一、引言 二、环境准备 三、安装Web服务器&#xff08;Apache&#xff09; Ubuntu/Debian系统&#xff1a; CentOS/Red Hat系统&#xff1a; 四、安装PHP解释器 Ubuntu/Debian系统&#xff1a; CentOS/Red Hat系统&#xff1a; 五、配置Apache以支持PHP Ubuntu/…

我在高职教STM32——LCD液晶显示(1)

大家好&#xff0c;我是老耿&#xff0c;高职青椒一枚&#xff0c;一直从事单片机、嵌入式、物联网等课程的教学。对于高职的学生层次&#xff0c;同行应该都懂的&#xff0c;老师在课堂上教学几乎是没什么成就感的。正因如此&#xff0c;才有了借助 CSDN 平台寻求认同感和成就…

基于CNN的掩码自编码器微调用于分类任务

开源仓库 JJLi0427/CNN_Masked_Autoencoder: Design a patches masked autoencoder by CNN (github.com)https://github.com/JJLi0427/CNN_Masked_Autoencoder CNN自编码器 前面的文章中我们模仿MAE的思路用CNN做了一个掩码自编码器 动手小实验&#xff0c;用CNN来构建Mase…

C++语法01 基本框架

目录 什么是 C &#xff1f; 新建源程序 保存源程序 程序基本框架 #include using namespace std; int main() return 0; 编译 运行 什么是 C &#xff1f; C语言&#xff0c;是基本的程序设计语言之一【程序设计语言&#xff0c;简单的来说就是编写代码来操控计…

【漏洞复现】Jenkins文件读取漏洞(CVE-2024-23897)

简介 jenkins是啥&#xff1f; 简单理解就是&#xff1a;一个开源的、用于方便代码管理、部署的基于web的平台&#xff0c;用于提高团队开发效率&#xff08;生产力&#xff09;。 Jenkins CLI 任意文件读取漏洞 CVE-2024-23897 是怎么回事&#xff1f; Jenkins提供了一个命令…