二进制表示法二进制是只用0和1两个值表示的数,规则是每个二进制进一。整数表示法Java使用补码来表示负数。具体的,除符号位外,其余位取反加1。Java二进制符号位中符号位保持不变还是1(符号位0-正数,1-负数)不固定:在Byte类型的值中,因为是一个字节,也就是八位取值范围为-128~127,符号位为二进制的第8位;Short类型的值是两个字节的16位值,符号位是第16位:Integer是32位,Integer的第32位是符号位;Long是64位,Long类型的第64位是符号位。浮点数Java中的大多数浮点数都不能精确表示,为什么?因为用二进制表示小数和十进制表示一样有问题,有无限循环小数和无限不循环小数,比如十进制的1/3,十进制的0.333……无限3,二进制表示也会有这个问题,无法准确表示0.1、0.2、0.3、0.4等二进制表示。0.5可以表示为2^(-1),可以准确表示。可见,只有能够用科学记数法准确表示的二进制小数才能准确表示。其他一切都无法准确表达。Java使用32位float和64位double来表示浮点小数。浮点数十进制转二进制,整数部分除以2,整数为0,否则为1,直到结果为1,然后从后往前的结果就是它的二进制值;小数部分的二进制部分取小数部分乘以2,结果大于等于1取1,否则取0,再取小数部分乘以2,取值直到结果为0或循环。二元运算符AND&:全1为1,否则为0。二进制中的1的与运算具有保留原值的作用,任意值(0,1)与1的与运算结果都不会改变。这在HashMap中使用。或|:1为1,所有0为0。二进制中0的OR运算也有保留原值的作用,任意值(0,1)与0的OR运算结果都不会改变。非~:0为1,1为0。异或^:相同则为0,不同则为1。二进制中0的异或运算有保留原值的作用,1的异或运算有取反的作用。左移<<:符号位不变时,其余全部左移一位,低位补0,相当于乘以2的结果。右移>>:符号位时bit不变,其余全部右移一位,高位补0,相当于除以2的结果。无符号右移>>>:所有成员右移一位对,高位补0,相当于除以2的结果。
