一.原码 & 反码 & 补码:
对于有符号而言:
1.二进制数的最高位是符号位:0==正数;1 ==负数
2.正数的原码、反码、补码一致;
3.负数的反码 = 符号位不变,其他位取反
4.负数的补码 = 负数的反码+1
5.0的反码、补码都是0
6.Java中的数都是有符号的
7.计算机运算时都是以补码 的形式来运算的
8.当我们看运算结果时,必须看原码。
9.补码的补码就是原码。
二、位运算
1.其他进制的数字转成二进制究竟有多少位?
二进制数有多少位是根据字节数来转化的。
比如,整数的默认是int型,占4字节,那么它的二进制位数就有32位。
2.运算中的类型转换到底有哪几个过程?
1.位运算也是运算的一种,不同类型的数字进行运算之前会先进行类型转换:
(1)有强转就遵循强转;
(2)没有强转就自动类型转换——自动转成同一的高容量。比如int型和long型运算,就会先统一转成long型。
低 ------------------------------------> 高
byte,short,char—> int —> long—> float —> double
2.对操作数进行类型转化之后,然后才是运算。
3.运算之后是生成运算结果,这个过程中也会有一次类型转换。
(1)如果运算结果是赋给另一个变量,那么按照该变量的类型转化。
(2)如果没有赋给另一个变量,那么按照以下规则:
i.整型:有一个为long, 则结果也为long;
没有long时,结果为int。即使操作数全为shot,byte,结果也是int.
ii.浮点型:一个为double, 则结果为double.
只有两个操作数都是float, 则结果才为float.
【小结】运算的过程中一共会进行2次类型转换。
3.不同长度的整型进行位运算
众所周知,浮点数不能进行位运算。
如果两个不同长度的整型进行位运算时,系统会将二者按右端对齐,然后进行位运算。
1.右端对齐
2.(1)短的如果是正数,高位补0;
短的如果是负数,高位补1;
3.再进行运算。