前言
今天给大家分享一下C语言操作符的详解,但在此之前先铺垫一下二进制和进制转换与原码、反码、补码的知识点,都非常详细,也希望这篇文章能对大家有所帮助,大家多多支持呀!
操作符的内容我放在我的下一篇文章啦,大家一定要看哈!!!
目录
一、二进制和进制转换
我们所说的2进制、8进制、10进制、16进制就是数值的不同表现形式。
eg:13的2进制:1101
13的8进制:15
13的10进制:13
13的16进制:d
1. 10进制转化为10进制
eg:123
- 从个位开始,平方都是从0先开始
2. 2进制转化为10进制
2进制是由(0~1)的数字组成
10进制是由(0~9)的数字组成
eg:1101
- 相比十进制转化为十进制,这次的底数变为2了
- 先分别算每一项,加在一起,别忘记乘上所在位数对应的数字
2.1 10进制转化为2进制
eg:125
所得出的余数从下往上写就是转化完的二进制,为01111101,即1111101。
大家动手操作一下将它再转化为10进制!!!
注意:当数字比较小时,可以使用下图所示方法
如果是22呢,就为10110啦
3. 2进制转8进制和16进制
- 8进制是由(0~7)的数字组成
- 16进制较为特殊,是由(0~9)、(a~f)组成的
3.1 2进制转8进制
首先,将0~7的数字各自写成2进制,最多有3个二进制位,所以像2的二进制本身是0,需要将它写成010,这个换算方法在上一节标红的注意,很实用,望大家都能掌握,在上图我已经先列出来了,因为8进制的每一位是0~7的数字,所以只需列出7个即可。
然后从2进制序列中右边低位开始向左每3个2进制位会换算一个8进制位,剩余不够3个2进制位的直接换算。
如图是2进制的0110101,从最右边开始依次取三个
011:3
101:5
001:1
但是值得注意的是,换算后的153,需要写成0153,0开头,才会被当做8进制 ,
大家可以上机调试一下,153与0153是不同的。
3.2 2进制转16进制
2进制转化为16进制与转化为8进制相同,是将0~9、a~f各自写成2进制,需要4个2进制位
eg:2进制的01101011
同时我也将二进制都列了出来,但是建议还是要动手算算。
所以转化为的结果为0x6b,相同的,16进制前要加上0x。
二、原码、反码、补码
- 整数的二进制形式有三种:原码、反码、补码。
- 有符号整数的三种表示方法均有符号位和数值位两部分,二进制序列中,最高的一位被当做符号位,剩余的都是数值位。
- 即正数最高位显示0,负数最高位显示1。
- 整数分为正整数与负整数。
- 在正整数中:原码=反码=补码。
- 在负整数中:
- 直接将数值按照正负数的形式翻译成二进制得到的就是原码
- 将原码的符号位不变,其他一次按位取反就是反码(1变成0,0变成1,符号位不变)
- 反码+1得到补码
例:a=3与a=-3;
注意:逢二进一,如果反码尾数是101,则变成110
整数在内存中存储的是2进制的补码
为什么数据存放的是补码?
在计算机中,数值一律用补码来表示和存储。因为使用补码可以将符号位和数值域统一处理;同时,加法和减法也可以统一处理(CPU只有加法器)此外,补码与原码相互转换,其运算过程是相同的,不需要额外的硬件电路。
下图是分析的过程
结尾
这次的分享就到这里啦,这些都是为了接下来的操作符做铺垫,也在我的主页里!