1.进制数
(1)二进制数,八进制数,十进制数,十六进制数
<1>由0和1组成,逢二进一
<2>由0-7组成,逢八进一,表示时有前缀0
<3>由0-9组成,逢十进一
<4>由0-F组成,逢十六进一,表示时有前缀0x
(2)进制间的转换
<1>二进制转八进制,十六进制
三合一,四合一
<2>八进制,十六进制转二进制
一拆三,一拆四
<3>二进制转十进制
ex:10110=1*2^4+0*2^3+1*2^2+1*2^1+0*2^0
<4>八进制,十六进制转十进制
ex:0675=6*8^2+7*8^1+5*8^0
0x56f=5*16^2+6*16^1+15*16^0
<5>十进制转二进制
短除二,得余数,倒着排列
<6>小数转二进制
用2*十进制小数,可以得到积,将积的整数部分取出,用2*余下的小数部分,又得到一个积,再将积的整数部分取出,如此进行,直到积中的小数部分为0,此时0或1为二进制的最后一位。
ex:0.125转为二进制
0.125*2=0.25 取0
0.25*2=0.5 取0
0.5*2=1 取1
则二进制结果为0.001
若不可能得到小数部分为0,则二进制中要0舍1入
ex:0.2转为二进制
0.2*2=0.4 取0
0.4*2=0.8 取0
0.8*2=1.6 取1
0.6*2=1.2 取1
0.2*2=0.4 取0(舍去)
2.颜色的储存
(1)RGB模式
rgb分别代表红绿蓝光学三原色,RGB模式中每个像素占用3个字节(一个字节是8bit),分别用于表示颜色的R,G,B分量(255,255,255)
windows下的32位是R,G,B三个通道各占8位,共24位,加上亮度通道8位,所以是32位
当3中基色的亮度值相等时,产生灰色
当3种基色亮度值都是255时,产生白色
当三种基色亮度值都是0时,产生黑色
(2)int储存
int在计算机中占4byte,32位
0000 0000
r 0 10 1 101 1
g 1 01 1 101 1
b 01 00 1 1 00
int中存入数字6011724
(3)颜色值的获取
将int右移16位即可得到r
将int先左移(<<)16位去掉00000000和r行,再右移(>>)24位即可得到g
注意
在左移16位后,int数字以1开头变成了一个负数,再右移之后将变成一个负数
所以在右移的时候可以用>>>,表示不带符号的右移
同理,可得到b
(4)利用&简便计算
1表示保留原数,0表示舍弃该数
ex:1000 1111 0010 1110
& 0000 00001111 1111(2^8)
得 0000 0000 0010 1110
3.代码实现
(1)将int中的颜色分别拆分出来
public class rgb {
public static void main(String[]args){
int rgb=6011724;
int red=(rgb>>16);
int green1=(rgb<<16);
int green2=(green1>>>24);
int blue=(rgb>>0)&255;
System.out.println(red);
System.out.println(green2);
System.out.println(blue);
}
}
(2)将分开的rgb合成一个int数
int r=233;
int r1=r<<16;
int g=88;
int g1=g<<8;
int b=50;
int rgb1=(r1+g1+b);
System.out.println(rgb1);