【从饮水机到名人堂之c语言】操作符详解(1)
目录
前言:
一、操作符的分类
二、详解操作符
1.算术操作符
2.移位操作符
1.原码、反码、补码
2.左移位操作符
3.右移位操作符
三、位操作符
1.按位与&
2、按位或 |
3、异或^
总结:
前言:
我们前边对数组进行了系统 的学习,并且制作了三子棋游戏,相信大家对数组有了一个更为深入的了解,从今天开始,我们就要对操作符进行讲解。
一、操作符的分类
算术操作符 |
移位操作符 |
位操作符 |
赋值操作符 |
单目操作符 |
关系操作符 |
逻辑操作符 |
条件操作符 |
逗号操作符 |
下标引用、函数调用与结构成员 |
二、详解操作符
1.算术操作符
分为+、-、*、/、%五个算术操作符,算术操作符比较简单,和我们数学中所学的相似,但是要注意的是C语言中的乘号为*,而不是x。
还有以下几点我们要切记:
1. 除了 % 操作符之外,其他的几个操作符可以作用于整数和浮点数。2. 对于 / 操作符如果两个操作数都为整数,执行整数除法。而只要有浮点数执行的就是浮点数除法,即我们需要得到一个浮点数时,我们必须控制除数或被除数至少有一个为浮点型。3. % 操作符的两个操作数必须为整数。返回的是整除之后的余数。4.在使用 / 操作符过程中,也要记得除数不能为0。
2.移位操作符
移位操作符分为:
左移位操作符<<
右移位操作符>>
移位操作符实质上是对数字的二进制位进行操作,这里我们就必须带着大家来学习一些有关二进制的知识。
1.原码、反码、补码
原码就是我们要进行操作的数字转换为2进制后的形式,我们知道在32位操作系统下,一个整型为4个字节,即32个比特位,一个比特位就是一个0或者1的序列,计算机通过电势的高低来存储,0代表低电平,1代表高电平。
对于一个有符号类型的整数(unsigned int)来说最高位(即最左边的位)为符号位,1代表负号,0代表正号。
所以3和-5的原码就是:
00000000000000000000000000000011
10000000000000000000000000000101
了解了原码之后,那么什么是反码呢?
正数的反码就是原码本身,而负数的反码就是将这个数字的符号位除外的二进制序列按位取反之后所得到的二进制序列,什么叫按位取反呢?按位取反就是将每个比特位上的数,为0时改为1,为1时改为0。
所以3和-5的反码为:
0000 0000 0000 0000 0000 0000 0000 0011
1111 1111 1111 1111 1111 1111 1111 1010
补码也很简单,正数的补码就是原码本身,所以正数的原码反码补码都是相同的,而负数就是在反码的操作上加1。
所以3和-5的补码为:
0000 0000 0000 0000 0000 0000 0000 0011
1111 1111 1111 1111 1111 1111 1111 1011
在我们的内存中,存储的不是原码,而是这个数字的补码。
2.左移位操作符
左移位操作符就是对一个二进制数最左边的数舍弃,最右边补0。
对数字n进行移位操作,可以表示为n<<1,在没有被赋值的情况下,n的值并不会发生改变,只有当n=n<<1时,n的值才会发生变化。
通俗的来说,左移操作符就是给这个数乘上2,左移几位,就会成上2的几次方,例如:a=3<<2,求得的值就是3*2的平方。
3.右移位操作符
与左移位操作符有所不同,右移位操作符分为逻辑移位和算术移位,根据编译器的不同,可能在进行右移位时是逻辑移位,也可能是算术移位,逻辑移位就是将整个二进制序列向右移动,左边的空隙补上0,而算术移位则是将二进制序列向右移动,左边补上原来的符号位上的数。
以-1为例:
-1的补码为:
1111 1111 1111 1111 1111 1111 1111 1111
进行逻辑移位
0【补位】 1111 1111 1111 1111 1111 1111 1111 111 1【丢弃】
所以移位后:
0111 1111 1111 1111 1111 1111 1111 1111
进行算术移位
1【补位】 1111 1111 1111 1111 1111 1111 1111 111 1【丢弃】
所以移位后:
1111 1111 1111 1111 1111 1111 1111 1111
所以我们在进行移位后,将移位后的补码重新转化为原码,即可得到移位后的值。但是如何转化回原码呢?
我们知道 ,由原码转化为补码时,是通过原码取反再加1,所以转化回去可以先减1再取反,也可以先通过取反加1转化回去。
转化回去之后,我们发现-1算术右移1位的原码和补码相同,所以 移位后的值应该不变,那么到底是不是这样,我们回去验证一下。
int main() {int a = -1;int b = 0;b = a >> 1;printf("%d %d", a, b);return 0;
}
三、位操作符
位操作符有:
& // 按位与| // 按位或^ // 按位异或注:他们的操作数必须是整数。
位操作符与移位操作符相同,都是对二进制位进行操作,而且操作数都必须是整数。
1.按位与&
即就是将两个数的每个二进制位上的数进行判断,如果同时为1时结果为1,其余情况都为0。
如:3和-5在内存中存储的补码为:
0000 0000 0000 0000 0000 0000 0000 0011
1111 1111 1111 1111 1111 1111 1111 1011
n=3&-5的值应该为0000 0000 0000 0000 0000 0000 0000 0011
结果为3,那么我们用代码测试一下。
int main() {int a = 3;int b = -5;int c = a & b;printf("%d %d\n", a, b);printf("%d", c);return 0;
}
通过代码来验证是正确的。
2、按位或 |
即就是将两个数的每个二进制位上的数进行判断,如果同时为0时结果为0,其余情况都为1。
以3和-5来举例:
如:3和-5在内存中存储的补码为:
0000 0000 0000 0000 0000 0000 0000 0011
1111 1111 1111 1111 1111 1111 1111 1011
所以n= 3 | -5 = 1111 1111 1111 1111 1111 1111 1111 1011,通过取反加1得到原码,转化为十进制为-5,我们也来通过代码验证一下。
int main() {int a = 3;int b = -5;int c = a | b;printf("%d %d\n", a, b);printf("%d", c);return 0;
}
3、异或^
即就是将两个数的每个二进制位上的数进行判断,如果相同时结果为0,不同时都为1。
以3和-5来举例:
如:3和-5在内存中存储的补码为:
0000 0000 0000 0000 0000 0000 0000 0011
1111 1111 1111 1111 1111 1111 1111 1011
n=3^-5= 1111 1111 1111 1111 1111 1111 1111 1000,转化为原码,转化为十进制后,得到n=-8.
int main() {int a = 3;int b = -5;int c = a ^ b;printf("%d %d\n", a, b);printf("%d", c);return 0;
}
总结:
今天我们讲解了操作符中的算术操作符,位操作符,移位操作符,并且让大家了解到了二进制中的原码补码和反码,让我们对二进制数有了一个更为深入的认识,希望通过今天的学习,大家知道在内存中数据的储存形式以及几个操作符的使用方法。
【从饮水机到名人堂之c语言】操作符详解(1)相关推荐
- 【从饮水机到名人堂之c语言】详解rand()函数(详解随机数生成方法)
目录 前言 一.rand()函数 二.srand()函数 三.时间戳 四.time()函数 五.注意 六.猜大小游戏源码 总结 前言 在我们的日常写程序中,必然会用到我们的rand函数生成我们的随机数 ...
- C语言操作符详解 隐式类型转换 (整型提升 算数转换)
目录 一.算术操作符 二.左移操作符 右移操作符 1.二进制序列 2.左移操作符 3.右移操作符 3.1.逻辑运算/算术运算 3.2.对于移位运算符,不要移动负数位,这是标准未定义的 3.3.对于移位 ...
- 【从饮水机到名人堂之c语言】日常学习总结
目录 前言 一.指针 1.内存 2.指针变量的大小 二.static关键字 三.常量和宏 四.typedef关键字 五.结构体 总结 前言 在自己的学习过程中的总结,方便日后的复习. 一.指针 1.内 ...
- C语言——操作符详解
目录 一.算术操作符 二.移位操作符 三.位操作符 四.赋值操作符 五.单目操作符 六.关系操作符 七.逻辑操作符 八.条件操作符 九.逗号表达式 十.下标引用.函数调用和结构成员 以上就是C语言中涉 ...
- C语言操作符详解------移位操作符
今天给大家带来的是移位操作符的详解 首先大家在学习移位操作符之前要明确:移位操作符移动的是二进制位!!! << 左移操作符 >> 右移操作符 注意:移位操作符的操作数只 ...
- python语言编程基础-Python语言入门详解!快速学成Python!
原标题:Python语言入门详解!快速学成Python! 很多技能是被职场所需要的,但很可惜... 这些技能在大学中并学习不到. 大学和职场现实存在的横沟对大部分同学来说难以跨越或碰得头破血流... ...
- python语言入门m-Python语言入门详解!快速学成Python!
今日主题 "Python语言入门详解" 近两年来,Python语言借着数据科学和人工智能的"东风"成为了最流行的编程语言--街头巷尾人们口口相传.同时,Pyth ...
- C语言之详解#ifdef等宏
C语言之详解#ifdef等宏 这几个宏是为了进行条件编译.一般情况下,源程序中所有的行都参加编译.但是有时希望对其中一部分内容只在满足一定条件才进行编译,也就是对一部分内容指定编译的条件,这就是&qu ...
- c语言 宏教程 pdf,C语言之详解_ifdef等宏.pdf
C 语言之详解 #ifdef 等宏 指令用途 #空指令,无任何效果 #include 包含一个源代码文件 #define 定义宏 #undef 取消已定义的宏 #if 如果给定条件为真,则编译下面代码 ...
最新文章
- 微信小程序顶部tab切换以及滑动
- 单目和双目模式识别---游戏控制
- idea 报系统分区磁盘不足_系统磁盘管理功能讲解,电脑硬盘分区格式化修改驱动器号图文教程...
- 智能拨号的联系人快速模糊匹配的算法
- 平舌音 Z C S 的正确发音方式
- No1_6.字符串的基本操作2_Java学习笔记
- 我写的不只是小说更是程序人生
- Flutter 雷达扫描效果、Flutter旋转扫描
- 专科python应届生工资多少-应届毕业生自述面试15K月薪的Python后端开发经历,希望对你有用...
- Fffmpeg:从AVFrame中由YUV获取RGB
- html博客网页代码_Python自动化运维系列:Django搭建个人博客之前端篇
- SAP Serial Number
- 地铁bas服务器系统,地铁BAS系统构成及工作原理
- 6 errors and 0 warnings potentially fixable with the `--fix` option.
- 让你一遍就会的【单纯形法解线性规划最优】
- mysql加减时间-函数-时间加减
- 2022 Gartner RPA魔力象限发布,两家国产厂商入选,超自自动化成重点
- SNS2124(OEM博科FC交换机)忘记密码,密码初始化
- 【板绘软件】板绘初学者入门用什么软件比较好?都有哪些软件呢?
- 什么是搜索引擎蜘蛛(spider)