-
二进制
生活中用的都是十进制–满十进一–每一位都是0-9组成的。
二进制满2进1–0-1组成的–1101
十进制转二进制:
十进制:0-9
二进制:0-1
八进制:0-7
十六进制:0-9,a-f
二进制转八进制:
0153:前面带个0就是八进制
这里写自定义目录标题
0x6b:0x表示十六进制
- 原码,反码,补码。
整数的二进制位表示方法有三种:原码,反码,补码。
三种表示方法均有符号位和数值位两部分。符号位用0表示正,用1表示负
正整数的原码反码补码都相同。负整数的三种表示方法各不相同。
原码: 直接将数值按照正负数的形式翻译成二进制得到的就是原码
反码: 将原码的符号位不变,其他位次按位取反就可以得到反码
补码: 反码+1就得到补码
对整数来说,数据存放在内存中其实是补码
-
移位操作符
<<左移操作符
>>右移操作符
移位操作符的操作数只能是整数
3.1左移操作符:
左边抛弃,右边补0。
3.2右移操作符:(取决于编译器),大部分编译器采用算数右移
●逻辑右移:左边用0填充,右边丢弃
●算数右移:左边用原该值的符号位填充,右边丢弃
移位操作符不能移动负数位
-
位操作符:&(按位与)、|(按位或)、^(按位异或)–他们的操作必须是整数
&(按位与):对应的二进制位,有0则为0,两个同时为1才是1
|(按位或):对应二进制位上有1则为1,两个同时为0才为0
^(按位异或):对应二进制位上,相同则为0,相异则为1
例题:不能创建第三个变量,实现两个数的交换
原本:
异或是支持交换律的
这种异或操作是有局限性
(1)只能作用于整数交换
(2)代码的可读性差
(3)代码执行的效率也是低于使用第三个变量的方法
~按位取反操作符
-
逗号表达式
逗号操作符-优先级最低
逗号隔开的多个表达式 从左向右依次执行。整个表达式的结果是最后一个表达式的结果
- 下标访问[]、函数调用()
arr[]:下标引用
一个数组名+一个索引值
sizeof不是函数,是操作符
- 操作符属性:优先级、结合性—决定了表达式求值的计算顺序
int a=3+4*5;优先级
int b=3+4+5;结合性
-
表达式求值
表达式求值之前要进行类型转换,当表达式中的值转换到适当的类型,才开始计算。
整型提升:
1.有符号整数提升是按照变量的数据类型的符号位来提升的。
2.无符号整数提升,高位补0。
8.2算数转换
如果某个操作符的各个操作数属于不同的类型,那么除非其中一个操作数的转换为另一个操作数的类型,否则操作就无法进行。下面的层次体系称为寻常算数转换。