计算机中的进制之间的转换
1.二进制转十进制、十六进制
二进制有个8421法则,能够帮助我们快速的将二进制转为十进制
二进制:1 1 1 1 1 1 1 1
十进制:128 64 32 16 8 4 2 1
比如00001111 求其十进制则在1的位置找其对应也就是 8+4+2+1 = 15.
2.二进制转八进制
二进制转八进制就是把二进制的码从右往左,每隔三位进行一个分组,最后有一位或者2位时不够三位补0,分组求得十进制的数值就是组合起来就是其对应的八进制.
0 0 1 0 1 0 1 0 0
————————— ————————— ——————————
1 2 4
则其八进制位124
3.二进制转十六进制
二进制转十六进制就是把二进制的码从右往左,每隔四位进行一个分组,最后有一位或者2位时不够三位补0,分组求得十进制的数值就是组合起来就是其对应的十六进制.
4.十进制二进制
十进制是除二取余,余数倒排
5.十进制转十六进制
十六进制的表示形式 0-9 a b c d e f => 0-9 10 11 12 13 14 15
6.原码.补码.反码
计算机在计算的时候,是采用相应二进制的反码进行计算的
正数:正数的原码,反码,补码(二进制)都相同
负数:负数在计算机中是以补码形式存在的.
以数字7为例,说一下他的原码补码反码,求的数字十进制7的二进制为:111
原码:
符号位 数值位
+7 0 000 0111
-7的原码
-7 1 000 0111
反码:
正数的原码,反码,补码(二进制)都相同
负数的反码:除了符号位,所有位取反(0变1,1变0)
反码:
符号位 数值位
+7 0 000 0111
-7的反码
-7 1 111 1000
补码:正数的相同,负数在反码的基础上加1
符号位 数值位
+7 0 000 0111
-7的补码
-7 1 111 1001
总结:
求一个负数的补码的过程:
1.先求对应正数的原码(正数的原码,反码,补码都一样)
2.把正数的原码符号位变1(负数的原码)
3.把负数的原码除了符号位之外,取反(负数的反码)
4.在反码基础上+1 (负数的补码)
快速求一个负数的补码:
1.求对应正数的原码.
2.从右往左,遇到第一个1,1往右原样返回,1往左的全部取反.
负数原码补码之间相互
原码到补码的计算方式:取反+1,
补码到原码的计算方式:-1再取反。
7.java中的位运算符
计算机在计算的时候,是采用相应二进制的反码进行计算的,负数是以其补码的方式存储在硬盘上的
<< : 左移运算符:左移运算是将一个二进制位的操作数的按指定的移动位数向左移动,移出位被丢弃,右边的空位一律补0
左移n位就相当于乘以2的n次方
15 => 1111
15<<1 11110 =>30
>> : 有符号"右移运算 符,将运算符的左边的对象向右移动运算符右边指定的位数。使用符号扩展机制,也就是说,如果值为正,则在高位补0,如果值为负,则在高位补1,右移n位相当于除以2的n次方
>>> : 无符号"右移运算 符,将运算符的左边的对象向右移动运算符右边指定的位数。采用0扩展机制,也就是说,无论值的正负,都在高位补0