1.操作符分类
• 算术操作符: + 、- 、* 、/ 、%
• 移位操作符: << >>
• 位操作符: & | ^ `
• 赋值操作符: = 、+= 、 -= 、 *= 、 /= 、%= 、<<= 、>>= 、&= 、|= 、^=
• 单⽬操作符: !、++、--、&、*、+、-、~ 、sizeof、(类型)
• 关系操作符: > 、>= 、< 、<= 、 == 、 !=
• 逻辑操作符: && 、||
• 条件操作符: ? :
• 逗号表达式: ,
• 下标引⽤: []
• 函数调⽤: ()
• 结构成员访问: . 、->
接下来,我们会详细介绍其中的一部分操作符。有些操作符和二进制有关系,那我们先来铺垫一下二进制和进制转换的知识。
2.二进制和进制转换
在日常生活中,我们经常会遇到不同的进制方式。除了常用的十进制,还有星期的七进制,时间的六十进制等等。实际上,进制就是不同的数值表达形式。
例如15用不同进制的表达如下;
15的2进制:1111
15的8进制:17
15的10进制:15
15的16进制:F
我们着重了解二进制,用十进制来类比了解一下二进制。
十进制:
满十进一,每一位数字均是0~9.
二进制:
满二进一,每一位数字均是0~1.
2.1二进制转换为十进制
十进制123为什么代表的数值是123呢?这和他每一位的权重有关。个位数的权重是10^0,十位数的权重是10^1,三位数的权重是10^3,每一位的数字乘以他的权重就是他所代表的数值。
同理二进制也是这样。例如10111,按照权重的计算可知他所代表的数值是1*2^0+1*2^1+!*2^2+0*2^3+1*2^4=23。
这样就实现了二进制转换为十进制。
2.2十进制转换为二进制
2.3二进制转换八进制和十六进制
2.3.1二进制转换为八进制
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.3.2二进制转化为十六进制
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
3.原码,反码,补码
整数的2进制表⽰⽅法有三种,即原码、反码和补码
有符号整数的三种表⽰⽅法均有符号位和数值位两部分,2进制序列中,最⾼位的1位是被当做符号
位,剩余的都是数值位。
符号位都是⽤0表⽰“正”,⽤1表⽰“负”。
正整数的原、反、补码都相同。
负整数的三种表⽰⽅法各不相同。
原码:直接将数值按照正负数的形式翻译成⼆进制得到的就是原码。
反码:将原码的符号位不变,其他位依次按位取反就可以得到反码。
补码:反码+1就得到补码。
反码得到原码也是可以使⽤:取反,+1的操作。
对于整形来说:数据存放内存中其
实存放的是补码。
为什么呢?
在计算机系统中,数值⼀律⽤补码来表⽰和存储。原因在于,使⽤补码,可以将符号位和数值域统一处理;同时,加法和减法也可以统⼀处理(CPU只有加法器)此外,补码与原码相互转换,其运算 过程是相同的,不需要额外的硬件电路