一、常用数制
二进制:二进制是计算机技术中使用最广泛的一种数制,使用0和1两个数码表示。进位规则:逢二进一。借位规则:借一当二。
八进制:使用0到7表示数码。进位规则:逢八进一。借位规则:借一当八。
十进制:日常数制,使用0-9数码表示。
十六进制:0到9对应十进制0到9,a到f对应十进制10到15。进位规则:逢十六进一。借位规则:借一当十六。
二、常用数制转换
1、二 八 十六进制转十进制:
从右到左取 (数位)为相应次方m,取该数位的数字为乘数n。X进制为底数x。设2位数: x1^m * n + x0^m * n。
则 二进制 : 10110 为 2^4 * 1 + 2^3 * 0 + 2^2 * 1 + 2^1 * 1 + 2^0 * 0 = 16 + 0 + 4 + 2 + 0 = 22;
则 八进制 : 65464 为 8^4 * 6 + 8^3 * 5 + 8^2 * 4 + 8^1 * 6 + 8^0 * 4 = 24576 + 2560 + 256 + 48 + 4 = 27444;
则 十六进制 :949fae 为 16 ^ 5 * 9 + 16^4 * 4 + 16^3 * 9 + 16 ^ 2 * 15 + 16 ^ 1 * 10 + 16 ^ 0 * 14 = 9437184 + 262144 + 36864 + 3840 + 160 + 14 = 9740206;
2、十进制转 二 八 十六进制:
除数取余法(整数部分):
以要转的进制数为除数,取余数,先余为低,后余为高,商为0结束。
1424 转 二进制 :1424/2=712 余0,712/2=356 余0,356/2=178 余0,178/2=89 余0,89/2=44 余1,44/2=22 余0,22/2=11 余0,11/2=5 余1,5/2=2 余1,2/2=1 余0,1/2=0 余1 得10110010000
1544 转 八进制 :1544/8=193 余0,193/8=24 余1,24/8=3 余0,3/8=0 余3 得3010
167489 转 十六进制 :167489/16=10468 余1,10468/16=654 余4,654/16=40 余14,40/16=2 余8,2/16=0 余2 得28e41
乘基取整法(小数部分):
以X进制X为基数,小数部分乘基取整,先整为高,直到乘积为0或满足精度要求。
0.4645 转 二进制 : 0.4645*2=0.929 取0,0.929*2=1.858 取1,0.858*2=1.716 取1,0.716*2=1.432 取1,0.432*2=0.864 取0...... 够呛能得出0,所以取精度5位 得小数部分为 01110。
0.45 转 八进制 :0.45*8=3.6 取3,0.8*8=6.4 取6,0.4*8=3.2 取3,0.2*8=1.6 取1 够呛能得0,去4位精度 得0.3631
0.5665 转 十六进制 :0.5665*16=9.064 取9,0.064*16=1.024 取1,0.024*16=0.384 取0,0.384*16=6.144 取6,取4位精度得0.9106
三、常见编码格式
首先要清楚,计算机最小的存储单元是 位(bit)要么是0要么是1,这也是为什么二进制是计算机技术应用最广泛的原因。
8位组成1个字节(byte),基本计量单位,1个字节可存1个英文字母或半个汉字,以字节数为度量存储容量,1024位进制,1024B=1K(千) 1024kb=1MB(兆)1024MB=1GB 1024GB=1TB
字符是指计算机中使用的文字和符号,不是一个位面的概念,在不同的编码格式中对应关系不同:ASCII 1个英文字母占1字节,1个中文汉字是两个字节 UTF-8 1个英文字符占1个字节,1个中文汉字包括繁体占3个字节 Unicode 1个英文字母和中文汉字都占2个字节 utf-16 1个英文字母或汉字都占2个字节,Unicode拓展区的一些汉字占4个字节 UTF-32 所有字符都占4字节
1、常用编码格式
ASCII字符集 世界上最通用的单字节编码系统,1个ASCII码占1字节,换算成十进制,是0-255
GB2312字符集 中国标准的简体中文字符集,收录的汉字覆盖了99.75%的使用频率,使用双字节表示,前面的是高字节,后边的低字节
GBK字符集 是GB2312的扩展,收录了21886个符号,主要是拓展了对繁体字的支持
Unicode 字符集 国际标准码,融合了多种文字,所有文字都用两个字节表示。Unicode的编码方案包括 utf-8 长度可变字节存储unicode字符,1个英文占1字节 1个希腊字母占2字节 1个汉字占3字节 utf-16 全都占2字节 utf-32 全都占4字节
2、编码格式转换 (java)
使用流读取文件 :OutputStreamWriter 和 InputStreamReader
InputStreamReader(InputStream in,String charsetName)
OutputStreamWriter(OutputStream out,String charsetName)
重新编码:String
newStr = new String(str.getBytes(原格式),新格式);
3、UTF-8 有bom和无bom的区别
bom通常用于表示编码的字节顺序,但由于字节顺序和UTF-8无关,所以bom不是必须的,根据unicode标准不建议使用UTF-8带bom。