文章目录
一、操作符的分类
操作符大致分类如下:
- 算术操作符: + 、- 、* 、/ 、%
- 移位操作符: << >>
- 位操作符: & | ^
- 赋值操作符: = 、+= 、 -= 、 *= 、 /= 、%= 、<<= 、>>= 、&= 、|= 、^=
- 单⽬操作符: !、++、–、&、*、+、-、~ 、sizeof、(类型)
- 关系操作符: > 、>= 、< 、<= 、 == 、 !=
- 逻辑操作符: && 、||
- 条件操作符: ? :
- 逗号表达式: ,
- 下标引⽤: []
- 函数调⽤: ()
- 结构成员访问: . 、->
上述的操作符,我们已经讲过算术操作符、赋值操作符、逻辑操作符、条件操作符和部分的单⽬操作符,今天继续介绍⼀部分,操作符中有⼀些操作符和⼆进制有关系,我们先铺垫⼀下⼆进制的和进制转换的知识
二、二进制和进制转换
其实我们经常能听到 2进制、8进制、10进制、16进制 这样的讲法,那是什么意思呢?
其实2进制、8进制、10进制、16进制是数值的不同表⽰形式⽽已,⽐如:数值15的各种进制的表⽰形式:
15的2进制:1111
15的8进制:17
15的10进制:15
15的16进制:F
//16进制的数值之前写:0x
//8进制的数值之前写:0
我们重点介绍⼀下⼆进制:
⾸先我们还是得从10进制讲起,其实10进制是我们⽣活中经常使⽤的,我们已经形成了很多尝试:
• 10进制中满10进1
• 10进制的数字每⼀位都是0~9的数字组成
其实⼆进制也是⼀样的
• 2进制中满2进1
• 2进制的数字每⼀位都是0~1的数字组成
那么 1101 就是⼆进制的数字了
1.二进制与十进制的相互转换
- 二进制转为十进制:
其实10进制的123表⽰的值是⼀百⼆⼗三,为什么是这个值呢?其实10进制的每⼀位是有权重的,也称为位权,10进制的数字从右向左是个位、⼗位、百位…,分别每⼀位的权重是 10的零次方 , 10的一次方 , 10的二次方 …,整个求值过程如图:
2进制和10进制是类似的,只不过2进制的每⼀位的权重,从右向左是: 2 , 2 , 2 … 0 1 2
如果是2进制的1101,该怎么理解呢? 如图:
这就是2进制转换为十进制的完整过程,只要记住每一位的权重,然后乘以对应位的值即可,最后得到的就是十进制,这个方法叫做按权展开相加法 - 十进制转二进制:
如果有一个十进制数字150,我们怎样去得到它对应的二进制呢?这里我们要用到的方法就是除基取余倒排法,其中的基就是基数,多少进制,基数就是多少,如:2进制的基数就是2。
除基取余倒排法就用在十进制转为其它进制上,它的意思就是,用这个十进制数去除以另一个进制的基数,然后写出每次相除的余数,最后倒着排列,就得到了对应的进制数
比如十进制150转为二进制,用150除以2,然后记下余数,最后将所有余数倒着排列即可,具体方法如下:
2,二进制与八进制的相互转换
8进制的数字每⼀位是0 ~ 7的数字
- 二进制转为八进制:
二进制转为八进制非常简单,每三位为一组的二进制算出来,对应一位八进制,从右到左开始划分,如果划分到最左边时不够三位,那么就在前面补上对应的0,或者忽略掉也可以,把二进制01101011转换位十进制的方法如下:
- 八进制转二进制:
八进制转二进制也很简单,只需要把每一位的八进制数字组合成三位二进制数字,如把八进制17转为二进制的方法就是,将1拆成3位二进制数,将7拆为3为二进制数,最后得到答案,如下:
3.二进制与十六进制的相互转换
16进制的数字每⼀位是0 ~ 9, a ~ f 中的一个,a ~ f代表10~15的数字
- 二进制转为十六进制:
与二进制转八进制相似,二进制转八进制就是每三位二进制为一位八进制,而二进制转十六进制就是每4位二进制转1位十六进制,二进制11010110转为十六进制的过程如下:
2, 十六进制转二进制:
也与八进制转二进制类似,十六进制转二进制就是每一位十六进制写成4位二进制的组合,如把十六进制12A转换为二进制的过程为:
三、原码、反码和补码
整数可以分为有符号整数和无符号整数,无符号整数就全部都是正数,而一般的原码、反码和补码一般出现在有符号整数中,在有符号整数中,数值的表⽰⽅法有三种,即原码、反码和补码
有符号整数的三种表⽰⽅法均由符号位和数值位两部分组成,2进制序列中,最⾼位的1位是被当做符号位,剩余的都是数值位,符号位都是⽤0表⽰“正”,⽤1表⽰“负”
正整数的原、反、补码都相同,负整数的三种表⽰⽅法各不相同,如下:
- 原码:直接将数值按照正负数的形式翻译成⼆进制得到的就是原码
- 反码:将原码的符号位不变,其他位依次按位取反就可以得到反码,0变成1,1变成0
- 补码:反码加一就得到补码,知道补码也可以求原码,只需要再对补码取反加一,就可以得到原码
对于整形来说:数据存放内存中其实存放的是补码,因为在计算机系统中,数值⼀律⽤补码来表⽰和存储。原因在于,使⽤补码,可以将符号位和数值位统⼀处理;同时,加法和减法也可以统⼀处理为加法(CPU只有加法器),此外,补码与原码相互转换,其运算过程是相同的,不需要额外的硬件电路
四、移位操作符
移位操作符分为左移操作符(<<)和右移操作符(>>),它的操作数只能是整数,只能移位正整数,如>>1,而不能>>-1,这是未定义的部分,不要使用,并且移位的对象是二进制,所以要对其它进制进行移位时,需要将其转化为二进制再进行移位