宝宝进制转换学习总结
2009-09-11 01:13
344 查看
昨天老师讲到编码问题了,听的我有点晕了,嘿嘿!
早上六点钟闹铃就想了,起来没事干就查点资料看看。
说到编码肯定要先从计算机读取数据的方式入手了,
在计算机中存储数据的最小单位是位(bit),但计算机
不会以位作为最基本的存储单位,那样就太复杂了,所
以就采用字节(byte)作为最小的存储单位,1byte==8bit.
计算机在存储数据时是一个字节也就是八位用来表示一个
字符(一个数字、字母或其他符号,汉字就不只是一个字节了)
而这些字节都是以二进制数在计算机中存储的,但我们在
编程时经常用的是十进制或者八进制、十六进制。
所以我先说下他们之间的转换吧!
十进制用的最多了,那就从十进制开始:
十进制到二进制转换方法:
整数部分除以2求出商和余数,在用商继续处于2求出商和余数
以此类推直到商为0为止,然后所得结果的余数倒置过来就是二进制
整数位,比如:
十进制6.6875的整数部分二进制为:
6除以2 商3 余0
3除以2 商1 余1
1处于2 商0 余1
所以6的二进制整数位就等于110(记得余数要倒置过来)
好了,那我们在看看小数部分怎么转呢?
用小数部分乘以2获得结果的整数部分保留,然后在用此结果的小数
部分在乘以2取整,以此类推,直到小数部分为0。
十进制6.6875的小数部分二进制为:
0.6875乘以2 积1.375 整1
0.375乘以2 积0.75 整0
0.75乘以2 积1.5 整1
0.5乘以2 积1.0 整1
所得积的小数部分为0就结束了,0.6875(十)==》0.1011(二)
那么十进制的6.6875转换成二进制为110.1011
十进制到十六进制转换方法(同上):不过要除以16了。
(切记:十进制到某一进制的转换都是除以要转换的进制数)
100.728(十六)======》二进制转换(假设我们的二进制就保留三位小数)
95除以16 商5 余F
5除以16 商0 余5
这是整数部分结果为F5
再看小数部分:
0.728乘以16 积11.648 整B
0.648乘以16 积10.368 整A
0.368乘以16 积5.888 整5
后面我们就不用再算了,假设就保留到这
则:十进制的100.728转换为十六进制位:F5.BA5
好了,八进制也一样。
那么现在我们再看看其他进制向二进制的转换
八进制到二进制(二进制到八进制)的转换:
520(八)===========》二进制
当我们随便拿个二进制时要想转成八进制可以这么做:
1011010从右向左每三位一划分,最后不够用0不上。
如:上面二进制可转为==》001 011 010
那么001中每一个数字从左向右按照 当前数字乘以4,下一个数字乘以2,
最后一个数字乘以1,然后加起来就组成了第一个八进制数,后面的001和010
也都一样,最后把获得的三个八进制数连接起来就是最终的结果。
即:001-----------》1
011-----------》3
010-----------》2
所以二进制的1011010转换为八进制就是132。
当我算到这时突然就想,这结果虽然是对的(不信了您可以反过来算下)
但为什么要这样算了,其实这并不复杂,我们可以仔细想想:
1011010这是个二进制数(我操!这不废话吗,嘿嘿!),我们就拿它的后三位来看,
010最后一位最大八进制也就是1(别说这也看不出来),那中间那位最大能表示几呀?
肯定是2吧,那我们在看最前面那位伙计,它最大又能表示到几呢?
很显然后三3个都是0的话它最大也就是4了!而如果它们三个都是1的话正好就是7了,
哎呀,这不正好它在加个1就逢到上一位去了。
也就是说111再加1逢到上一位的那个1即:1000这个1就代表着一个8了。
所以说1011010中我们三个一分的话,后三位是个2吧,而再向前推三个的话,我们就拿
1011010中第四个1来看他就代表着一个8了,那么它再继续进两次一就是中间那011即就是
3个8了,所以132后面的32就代表着011(3*8)+010(1*2),而1011010中的最高位的
那个1就代表着8个8了,也就是说132中的1就是8个8。好了不敢再说了,我现在都快被
说蒙住了,嘿嘿!
那么反过来八进制的520到二进制也就很容易了
5---------》101
2---------》010
0---------》000
520(八)===========》101010000(二)
十六进制到二进制和上面算法基本一样,不同的是:
八进制转换是以每三位一划分,从左向右是4,2,1乘以当前数再相加。
而十六进制转换是以每四位一划分,从左向右是8,4,2,1乘以当前数再相加。
接着我们再看看其他进制到十进制的转换:
二进制到十进制的转换:
这个应该不是很难,就举个简单的例子看看吧!
1110(二)================>1*2的3次方+1*2的2次方+1*2的1次方+0*2的0次方结果为:
1110(二)================》8+4+2+0 = 14
1111111(二)============》127
(127+1(0也表示一个字符)=128正好是ASCII码表所能表示的最大字符数,嘿嘿!)
我们看一下规律:
不管几进制它到十进制的转换都可以表示为:(n代表被转数的进制位)
当前数从末尾开始乘以n的0次方+倒数第二个数乘以n的1次方+--------以此类推。
十六进制到十进制的转换:
我们继续用上面的公式进行计算:
8A(十六)=======》10*16的0次方+8*16的1次方 ======》138
更直观的写法应该这样:8A = 8*16 + 10 = 138。
八进制到十进制和上面也就一样了,不做演示了。
好了进制就先搞到这里了,现在已经很困了,下次再谈编码问题!
明天早上还有课,也该休息了。
早上六点钟闹铃就想了,起来没事干就查点资料看看。
说到编码肯定要先从计算机读取数据的方式入手了,
在计算机中存储数据的最小单位是位(bit),但计算机
不会以位作为最基本的存储单位,那样就太复杂了,所
以就采用字节(byte)作为最小的存储单位,1byte==8bit.
计算机在存储数据时是一个字节也就是八位用来表示一个
字符(一个数字、字母或其他符号,汉字就不只是一个字节了)
而这些字节都是以二进制数在计算机中存储的,但我们在
编程时经常用的是十进制或者八进制、十六进制。
所以我先说下他们之间的转换吧!
十进制用的最多了,那就从十进制开始:
十进制到二进制转换方法:
整数部分除以2求出商和余数,在用商继续处于2求出商和余数
以此类推直到商为0为止,然后所得结果的余数倒置过来就是二进制
整数位,比如:
十进制6.6875的整数部分二进制为:
6除以2 商3 余0
3除以2 商1 余1
1处于2 商0 余1
所以6的二进制整数位就等于110(记得余数要倒置过来)
好了,那我们在看看小数部分怎么转呢?
用小数部分乘以2获得结果的整数部分保留,然后在用此结果的小数
部分在乘以2取整,以此类推,直到小数部分为0。
十进制6.6875的小数部分二进制为:
0.6875乘以2 积1.375 整1
0.375乘以2 积0.75 整0
0.75乘以2 积1.5 整1
0.5乘以2 积1.0 整1
所得积的小数部分为0就结束了,0.6875(十)==》0.1011(二)
那么十进制的6.6875转换成二进制为110.1011
十进制到十六进制转换方法(同上):不过要除以16了。
(切记:十进制到某一进制的转换都是除以要转换的进制数)
100.728(十六)======》二进制转换(假设我们的二进制就保留三位小数)
95除以16 商5 余F
5除以16 商0 余5
这是整数部分结果为F5
再看小数部分:
0.728乘以16 积11.648 整B
0.648乘以16 积10.368 整A
0.368乘以16 积5.888 整5
后面我们就不用再算了,假设就保留到这
则:十进制的100.728转换为十六进制位:F5.BA5
好了,八进制也一样。
那么现在我们再看看其他进制向二进制的转换
八进制到二进制(二进制到八进制)的转换:
520(八)===========》二进制
当我们随便拿个二进制时要想转成八进制可以这么做:
1011010从右向左每三位一划分,最后不够用0不上。
如:上面二进制可转为==》001 011 010
那么001中每一个数字从左向右按照 当前数字乘以4,下一个数字乘以2,
最后一个数字乘以1,然后加起来就组成了第一个八进制数,后面的001和010
也都一样,最后把获得的三个八进制数连接起来就是最终的结果。
即:001-----------》1
011-----------》3
010-----------》2
所以二进制的1011010转换为八进制就是132。
当我算到这时突然就想,这结果虽然是对的(不信了您可以反过来算下)
但为什么要这样算了,其实这并不复杂,我们可以仔细想想:
1011010这是个二进制数(我操!这不废话吗,嘿嘿!),我们就拿它的后三位来看,
010最后一位最大八进制也就是1(别说这也看不出来),那中间那位最大能表示几呀?
肯定是2吧,那我们在看最前面那位伙计,它最大又能表示到几呢?
很显然后三3个都是0的话它最大也就是4了!而如果它们三个都是1的话正好就是7了,
哎呀,这不正好它在加个1就逢到上一位去了。
也就是说111再加1逢到上一位的那个1即:1000这个1就代表着一个8了。
所以说1011010中我们三个一分的话,后三位是个2吧,而再向前推三个的话,我们就拿
1011010中第四个1来看他就代表着一个8了,那么它再继续进两次一就是中间那011即就是
3个8了,所以132后面的32就代表着011(3*8)+010(1*2),而1011010中的最高位的
那个1就代表着8个8了,也就是说132中的1就是8个8。好了不敢再说了,我现在都快被
说蒙住了,嘿嘿!
那么反过来八进制的520到二进制也就很容易了
5---------》101
2---------》010
0---------》000
520(八)===========》101010000(二)
十六进制到二进制和上面算法基本一样,不同的是:
八进制转换是以每三位一划分,从左向右是4,2,1乘以当前数再相加。
而十六进制转换是以每四位一划分,从左向右是8,4,2,1乘以当前数再相加。
接着我们再看看其他进制到十进制的转换:
二进制到十进制的转换:
这个应该不是很难,就举个简单的例子看看吧!
1110(二)================>1*2的3次方+1*2的2次方+1*2的1次方+0*2的0次方结果为:
1110(二)================》8+4+2+0 = 14
1111111(二)============》127
(127+1(0也表示一个字符)=128正好是ASCII码表所能表示的最大字符数,嘿嘿!)
我们看一下规律:
不管几进制它到十进制的转换都可以表示为:(n代表被转数的进制位)
当前数从末尾开始乘以n的0次方+倒数第二个数乘以n的1次方+--------以此类推。
十六进制到十进制的转换:
我们继续用上面的公式进行计算:
8A(十六)=======》10*16的0次方+8*16的1次方 ======》138
更直观的写法应该这样:8A = 8*16 + 10 = 138。
八进制到十进制和上面也就一样了,不做演示了。
好了进制就先搞到这里了,现在已经很困了,下次再谈编码问题!
明天早上还有课,也该休息了。
相关文章推荐
- C语言再学习之进制转换总结
- Java基础学习总结(14)---File类、字节流与字符流、字节字符转换流
- Date类学习总结(Calendar Date 字符串 相互转换 格式化)
- 进制的相互转换学习记录
- Date类学习总结(Calendar Date 字符串 相互转换 格式化)
- JAVA基础学习之命令行方式、配置环境变量、进制的基本转换、排序法、JAVA文档生成等(1)
- java多线程学习总结之二:线程状态的转换
- Date类学习总结(Calendar Date 字符串 相互转换 格式化)
- Date类学习总结(Calendar Date 字符串 相互转换 格式化)
- Struts2学习总结(2)--数据接收,数据共享,类型转换,上传下载
- 学习总结 数据类型的应用与转换
- jQuery学习大总结(一)jQuery对象与dom对象转换
- SQLite 锁机制学习总结 锁状态转换及锁机制实现代码分析
- c++学习总结:标准库字符串和C语言字符串的转换
- java基础学习记录之利用数组查表法进行进制转换的学习与练习六
- 宝宝Struts2学习总结
- Date类学习总结(Calendar Date 字符串 相互转换 格式化)
- 【学习笔记】Hibernate中对象的状态和转换以及Session的主要方法总结
- Date 类学习总结(Calendar Date 字符串 相互转换 格式化)
- Date类学习总结(Calendar Date 字符串 相互转换 格式化)