计算机的存在就是对数据的操作,而底层数据的操作是通过电的开关,就形成了二进制的数据。
十进制是我们常用的进制,二进制是计算机用的进制,而要实现互通,就必须要进行进制转换。
java中数据都有符号位,高位表示符号位。
byte8个二进制位 short16 char16 int32 long64 flaout32 double64
二进制的每三个,是一个八进制的一个,而每四个是十六进制的一位。这样就非常容易进行转换了。
数有原码,反码,补码,计算机的运算都是以补码方式进行的。
正数的原码,反码,补码,都是一样的。
负数的原码是,高位写符号,其余是相对正数的部分,反码是原码取反符号位不变,补码是反码+1。
负数的补码其实就是二进制的真正形式。而人们又不能一下子就写出来,就用了原码(这样就可以让我们直观的写出来),而原码又不是真正的二进制形式,所以用到了反码加一,这样就实现了即方便人理解又是正确的结果。(正数是不需要这些的,但负数引入了,正数就用三者相等,引入原码补码反码)
当时天真的我用正数的二进制取反加一,结果不对。
位运算符就是基于二进制,进行移位操作的。
当a是int类型时,a>>>b时是怎么操作的呢?
很多人会认为是向右移动b位,空位用0来补。
int类型是32位,当移动32位时,是不是就是0呢?
原来我认为是,可以做实验,就发现不对。我百思不得其解,最后在张孝祥老师的就业与指导中找到了答案。
如上例:计算机在移位时,进行了这样的操作(拿a与32取模,然后才是移位的数,当a<32时,模数还是a)
---------------------- android培训、 java培训、期待与您交流! ----------------------