一、操作符的分类
• 算术操作符: + 、- 、* 、/ 、%
• 移位操作符:<< >>
• 位操作符: & | ^
• 赋值操作符: = 、+= 、 -= 、 *= 、 /= 、%= 、<<= 、>>= 、&= 、|= 、^=
• 单⽬操作符: !、++、--、&、*、+、-、~ 、sizeof、(类型)
• 关系操作符: > 、>= 、< 、<= 、 == 、 !=
• 逻辑操作符: && 、||
• 条件操作符: ? :
• 逗号表达式: ,
• 下标引用: []
• 函数调用: ()
• 结构成员访问: . 、->
二、二进制和进制转换
所有的进制都是数值的不同表现形式。
数字15
二进制:1111
八进制:17
十六进制:F
十六进制一般写成0x什么,如15:0xF
八进制一般写成0什么,如15:017
2.1二进制转十进制
十进制中满10进1,二进制中满2进1。
十进制中,例如123每一位是有权重的,从右到左依次是个位数,十位数,百位数,每一位的权重分别是10^0,10^1,10^2。
二进制与十进制是类似的,权重依次是2^0,2^1,2^2.....
二进制例如1101
它的十进制算出来是13。
2.2十进制转二进制
2.3二进制转八进制
八进制数的每一位是0-7,0-1写成二进制的时候需要三位就足够了,所以三位二进制组成一位八进制的数。
如二进制的01101011,换成八进制0153
2.4二进制转十六进制
十六进制的每一位是0-9,a-f,各自写成二进制,只需要四位二进制位。
如二进制的01101011,转换成十六进制0x6b,十六进制写的时候前面要加0x。
三、原码、反码、补码
整数的2进制表示方法有三种,即原码、反码和补码。
有符号整数的三种表示方法均有符号位和数值位两部分,2进制序列中,最高位的1位是被当做符号
位,剩余的都是数值位。符号位都是用0表示“正”,用1表示“负”。
正数:正数的原码,反码,补码都相同。
负数:负数的原码,反码,补码都不相同。
原码:直接按照正负数的形式翻译成二进制。
反码:原码的符号位不变,其它按位取反。
补码:反码+1。
对于整型来说,数据存放内存中其实存放的是补码。
四、移位操作符
<<左移操作符
>>右移操作符
4.1左移操作符
规则:左边抛弃,右边补零。
当num左移一位时,为什么n等于20呢?
如图可以看出,num左边丢1位,右边补了一位。
4.2右移操作符
右移操作符移位规则分为两种:
1.逻辑右移:左边用0填充,右边丢弃。
2.算术右移:左边用该值的符号位填充,右边丢弃。
编译器中通常采用算术右移。
对于移位运算符,不要移动负数位,这个标准还未规定。