操作符详解(上) (C语言)

操作符详解(上)

  • 一. 进制转换
    • 1. 二进制
    • 2. 二进制的转换
  • 二. 原码 补码 反码
  • 三. 操作符的分类
  • 四. 结构成员访问操作符
    • 1. 结构体的声明
    • 2. 结构体成员访问操作符

一. 进制转换

1. 二进制

在学习操作符之前,我们先了解一些2进制、8进制、10进制等的问题,我们在平时的学习中经常听到关于进制转换的问题,其实就是数字的表达形式不同,比如我们将数字15用不同的进制表示出来:在这里插入图片描述
(另外16进制前面加的是0x,8进制前面加的是0)
我们重点介绍一下二进制:
首先我们还是得从10进制讲起,其实10进制是我们⽣活中经常使用的,我们已经形成了很多尝试:
• 10进制中满10进1
• 10进制的数字每一位都是0~9的数字组成
其实二进制也是一样的
• 2进制中满2进1
• 2进制的数字每⼀位都是0~1的数字组成
那么1101 就是二进制的数字了。

2. 二进制的转换

(1) 2进制转8进制:比如15的二进制是1111,那么换成8进制就是利用15除以8看每次的余数和商,那么8进制就是17,其实8进制的每⼀位是有权重的,8进制的数字从右向左是个位、⼗位、百位…,分别每⼀位的权重是80、81、82…那么15也就是80 *7+81 *1,这就是15从二进制转成了8进制。
(2) 10进制转2进制:道理是一样的,10进制的每⼀位是有权重的,10进制的数字从右向左是个位、⼗位、百位…,分别每⼀位的权重是 100 , 101 , 102…比如123用10进制表示就是123,而转为2进制:在这里插入图片描述

二. 原码 补码 反码

当我们掌握了2进制等的转换,我们就要了解一下计算机中对于整数的三种表现形式,即整数的原码、补码、反码有符号整数的三种表示方法均有符号位数值位两部分,2进制序列中,最高位的1位是被当做符号位,剩余的都是数值位。
符号位都是用0表示“正”,用1表示“负”。(一个整型是由四个字节组成,一个字节占8个bit位,所以一共由32个bit组成)
正整数的原、反、补码都相同
负整数的三种表示方法各不相同
原码:直接将数值按照正负数的形式翻译成二进制得到的就是原码。
反码:将原码的符号位不变,其他位依次按位取反就可以得到反码。
补码:反码+1就得到补码。
补码得到原码也是可以使用:取反,+1的操作。
比如:15的原码补码反码是00000000000000000000000000001111
而 -15的原码是10000000000000000000000000001111,反码11111111111111111111111111110000(符号位不变,其他位按位取反),补码是11111111111111111111111111110001(末尾加1,得2进1,反码加1就是补码)
对于整形来说:数据存放内存中其实存放的是补码。为什么呢?
在计算机系统中,数值一律用补码来表示和存储。原因在于,使用补码,可以将符号位和数值域统⼀处理;同时,加法和减法也可以统⼀处理(CPU只有加法器)此外,补码与原码相互转换,其运算过程是相同的,不需要额外的硬件电路。

三. 操作符的分类

(1) 移位操作符:<<左移操作符 --------- >>右移操作符,注意移位操作符只能适用于整数!并且移动的是二进制位中的补码
下面展示一些 内联代码片

//左移操作符
int main()
{int a = 10;int b = a << 1;printf("%d %d", a, b);return 0;
}

在这里插入图片描述
对于左移操作符来说原理只有一种就是左边抛弃,右边补0在这里插入图片描述
对于右移操作符也是一样的都是移动的2进制中的补码,右移操作符有两种方式:左边用0填充,右边补0左边用原该值的符号位填充,右边丢弃

(2) 位操作符:&(按位与) |(按位或) ^(按位异或) ~(按位取反)
位操作符一般是由两个操作数来完成的,并且也只能用于整数。
&:对两个数的补码进行运算(一个0一个1是0,两个1才是1)
|: 也是补码进行运算(只要有1就是1,两个0才是0)
^: 相同为0相异为1(异或是支持交换律的)
~: 单个数字(按2进制的补码取反)
比如给大家举一个例子,不能创建临时变量(第三个变量),实现两个整数的交换。
下面展示一些 内联代码片

int main()
{int a = 3;int b = 9;a = a ^ b;b = a ^ b;a = a ^ b;printf("%d %d\n", a,b);return 0;
}

在也就用到了位操作符^,后面大家多对这些运算符号进行实践,也会发现它们的实用性和便捷感。

(3)单目操作符:! ++ – & * - ~
这些都是单个数字完成的,特点就是只有一个操作数,很多符号我们也都认识。
!: 对一个表达式取反操作,即如果表达式为真,则结果为假。
++ – : 比如1++就是1本身加上1等于2,1–就是1本身减去1等于0(但是需要注意的点是++放在1之前和1之后是不一样的)在这里插入图片描述
& :取地址操作符

  • :解引用操作符
    在单目操作符中只有 & 和 * 没有介绍,这2个操作符我们在后期学习指针的时候会详细的介绍。
    (4) 逗号表达式:1 exp1, exp2, exp3, …expN
    逗号表达式,就是⽤逗号隔开的多个表达式。逗号表达式,从左向右依次执行。整个表达式的结果是最后⼀个表达式的结果。
    (5) 下标访问[]、函数调用()

四. 结构成员访问操作符

1. 结构体的声明

什么结构体?在C语言中已经提供的内置类型比如char、short、int等,但是只有这些内置类型是不够的,所以增加了结构体这种自定义的数据类型。其实结构体就是一些值的集合,类型不一定相同。struct是结构体关键字。
结构体的声明: 在这里插入图片描述
在这里插入图片描述
下面展示一些 内联代码片

struct student
{//成员变量char name[20];int age;float score;	 
};int main()
{int a = 0;struct student s1;struct student s2;return 0;
}

上述代码就是结构体的创建,首先我们就使用struct创建了一个结构体,包括字符型、整型等,然后这就相当于一个类型了,再看我们下面的代码,就像int a一样我们使用struct student也创建变量s1、s2等,当然像代码中的变量属于局部变量,如果需要全局变量我们可以定义在函数的外部。另外我们可以直接在结构体定义的括号外面直接定义变量(也是全局变量)。

2. 结构体成员访问操作符

结构体成员的直接访问:结构体成员的直接访问是通过点操作符(.)访问的。点操作符接受两个操作数,使用方式:结构体变量.成员名在这里插入图片描述
结构体成员的间接访问:有时候我们得到的不是⼀个结构体变量,而是得到了⼀个指向结构体的指针。使用方式:结构体指针->成员名,如下所示:在这里插入图片描述
以上就是操作符的部分解析,下一部分我也会及时更新。

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

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

相关文章

modelsim做后仿真的一点思路

这是以TD_5.6.3_Release_88061生成的网表文件&#xff08;其他工具生成的网表文件类似&#xff09;&#xff0c;与modelsim联合进行门级仿真的样例&#xff0c;时序仿真与门级仿真的方法类似&#xff0c;只是增加了标准延时文件。 1、建立门级仿真工程 将门级网表和testbench添…

vivado SLR

描述 超级逻辑区&#xff08;SLR&#xff09;是包含在堆叠硅中的单个FPGA芯片 互连&#xff08;SSI&#xff09;设备。堆叠式硅互连&#xff08;SSI&#xff09;技术使用无源硅 具有微凸块和硅通孔&#xff08;TSV&#xff09;的内插器&#xff0c;用于组合多个FPGA管芯 切片&a…

【ARM Trace32(劳特巴赫) 使用介绍 2.7 -- bat 脚本传参数给 trace32 cmm 脚本】

请阅读【Trace32 ARM 专栏导读】 文章目录 bat 脚本传参数给 trace32脚本可变参数传入CMM 脚本接收参数运行BAT脚本bat 脚本传参数给 trace32脚本 在使用 Trace32 的过程中,如果每次都是通过GUI 界面来操作,是习惯使用命令行工作的人所不能忍受的!!!,那么能不同通过脚本…

如何下载植物大战僵尸杂交版,最全攻略来了

《植物大战僵尸杂交版》由热爱原版游戏的B站UP主“潜艇伟伟迷”独立开发&#xff0c;带来了创新的游戏体验。如果你是策略游戏的爱好者&#xff0c;下面这份全面的下载和游玩攻略将是你的理想选择。 游戏亮点&#xff1a; 杂交植物系统&#xff1a;结合不同植物特性&#xff0c…

CMakeList.txt 与makefile文件介绍

在C 项目中&#xff0c; 我们经常可以看到CMakeList.txt 文件和makefile文件&#xff0c; 那么它们分别有什么用呢&#xff1f; 下面的图示很好地解释了它们的作用以及两者之间的关系。

021.合并两个有序链表,递归和遍历

题意 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 难度 简单 标签 链表、排序 示例 输入&#xff1a;l1 [1,2,4], l2 [1,3,4] 输出&#xff1a;[1,1,2,3,4,4]输入&#xff1a;l1 [], l2 [] 输出&#xff1a;[]…

七天速通javaSE:第四天 递归算法

文章目录 前言一、递归的介绍二、递归模型&#xff08;n!&#xff09;1 阶乘的定义&#xff1a;2. 阶乘的递归代码实现3. 递推与回归的内部逻辑三、练习 前言 本文将学习递归算法。在计算机科学中&#xff0c;递归算法是一种将问题不断分解 为同一类子问题来解决问题的方法。递…

vue3项目登录成功后根据角色菜单来跳转指定页面(无首页)

前言&#xff1a;需求不想要首页&#xff0c;登录什么角色跳转到这个角色经常使用的页面。&#xff08;例如&#xff1a;审核者角色的人输入用户名密码成功后就自动跳转到待审核的页面&#xff0c;仓库管理员登录成功则自动跳转到仓库列表&#xff09; 需要解决的点和想法&…

对抗生成网络GANP52-

1.对抗生成网络的重点&#xff1a;有原始的输入&#xff0c;按照需求&#xff0c;生成新的数据。 eg1:超分辨率重构(首先先告诉神经网络什么是低分辨率&#xff0c;什么是高分辨率&#xff0c;让计算机学习两者的联系。 eg2:警察抓小偷的时候&#xff0c;由于录像太过模糊&…

202485读书笔记|《我还有一片风景要完成》——溪水急着要流向海洋 浪潮却渴望重回土地 弱水长流,我只能尽一瓢饮,世界大千,我只能作一瞬观

202485读书笔记|《我还有一片风景要完成》——溪水急着要流向海洋 浪潮却渴望重回土地 弱水长流&#xff0c;我只能尽一瓢饮&#xff0c;世界大千&#xff0c;我只能作一瞬观 《华语散文温柔的一支笔&#xff1a;张晓风作品集&#xff08;共5册&#xff09;》张晓风&#xff0c…

【计算机网络篇】数据链路层(13)共享式以太网与交换式以太网的对比

文章目录 &#x1f354;共享式以太网与交换式以太网的对比&#x1f50e;主机发送单播帧的情况&#x1f50e;主机发送广播帧的情况&#x1f50e;多对主机同时通信 &#x1f6f8;使用集线器和交换机扩展共享式以太网的区别 &#x1f354;共享式以太网与交换式以太网的对比 下图是…

AtCoder Beginner Contest 359(ABCDEFG题)视频讲解

A - Count Takahashi Problem Statement You are given N N N strings. The i i i-th string S i S_i Si​ ( 1 ≤ i ≤ N ) (1 \leq i \leq N) (1≤i≤N) is either Takahashi or Aoki. How many i i i are there such that S i S_i Si​ is equal to Takahashi? C…

CMN-700(1)CMN-700概述

本章介绍CMN-700&#xff0c;这是用于AMBA5 CHI互连&#xff0c;且可根据需要定制的网格拓扑结构。 1. 关于CMN‐700 CMN‐700是一种可配置扩展的一致性互连网络&#xff0c;旨在满足高端网络和企业计算应用中使用的一致性网络系统的功率、性能和面积(PPA)要求。支持1-256个处…

学习入门 chatgpt原理 一

学习文章&#xff1a;人人都能看懂的chatGpt原理课 笔记作为学习用&#xff0c;侵删 Chatph和自然语言处理 什么是ChatGpt ChatGPT&#xff08;Chat Generative Pre-training Transformer&#xff09; 是一个 AI 模型&#xff0c;属于自然语言处理&#xff08; Natural Lang…

基于uni-app和图鸟UI的云课堂小程序开发实践

摘要&#xff1a; 随着移动互联网的快速发展&#xff0c;移动学习已成为教育领域的重要趋势。本文介绍了基于uni-app和图鸟UI框架开发的云课堂小程序&#xff0c;该小程序实现了移动教学、移动学习、移动阅读和移动社交的完美结合&#xff0c;为用户提供了一个便捷、高效的学习…

SR655 OCP3 网卡Legacy PXE 轮循设置

1、更改UEFI Boot Mode为UEFI&#xff0c;保存重启服务器&#xff0c;再次进入UEFI界面调整如下图例 更改如下所有网卡legacy 为PXE。后将Boot Mode 更改为legacy,保存退出。 如下图例操作依次更改所有网卡口 2、步骤1&#xff0c;更改Boot Mode 为Legacy保存退出重启服器后&…

Redis安装与使用

目录 1、介绍 1、redis的特点: 2、缓存 2、安装Redis 1、安装单机版redis 2、redis-cli命令参数 3、清空数据库的两种方式和作用域&#xff1a; 4、redis的增删查改命令 5、redis的查看所有分类命令 6、redis过期时间与控制键的行为 7、redis的相关工具 1、介绍 r…

2023 年度国家科学技术奖励公布

人不走空 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌赋&#xff1a;斯是陋室&#xff0c;惟吾德馨 目录 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌…

文件批量重命名001到100 最简单的数字序号递增的改名技巧

文件批量重命名001到100 最简单的数字序号递增的改名方法。最近看到很多人都在找怎么批量修改文件名称&#xff0c;还要按固定的ID需要递增&#xff0c;这个办法用F2或者右键改名是不能做到的。 这时候我们可以通过一个专业的文件批量重命名软件来批量处理这些文档。 芝麻文件…

通过命令行配置调整KVM的虚拟网络

正文共&#xff1a;1234 字 20 图&#xff0c;预估阅读时间&#xff1a;2 分钟 在上篇文章中&#xff08;最小化安装的CentOS7部署KVM虚拟机&#xff09;&#xff0c;我们介绍了如何在最小化安装的CentOS 7系统中部署KVM组件和相关软件包。因为没有GUI图形界面&#xff0c;我们…