这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » 整数,小数如何转为ASC码

共5条 1/1 1 跳转至

整数,小数如何转为ASC码

工程师
2015-05-04 21:45:03     打赏
请教大家一个问题 小数和整数如何转为ASC码呢,对于16进制,已经成功的转为ASC码了,对于 小数、负数如何转为ASC码呢,谢谢了,给点提示吧。


高工
2015-05-05 09:45:40     打赏
2楼
十进制小数转换成二进制小数采用"乘2取整,顺序排列"法。具体做法是:用2乘十进制小数,可以得到积,将积的整数部分取出,再用2乘余下的小数部分,又 得到一个积,再将积的整数部分取出,如此进行,直到积中的整数部分为零,或者整数部分为1,此时0或1为二进制的最后一位。或者达到所要求的精度为止。 
然后把取出的整数部分按顺序排列起来,先取的整数作为二进制小数的高位有效位,后取的整数作为低位有效位。  
十进制小数转二进制 
如:0.625=(0.101)B 
0.625*2=1.25======取出整数部分1 
0.25*2=0.5========取出整数部分0 
0.5*2=1==========取出整数部分1 

再如:0.7=(0.1 0110 0110...)B 
0.7*2=1.4========取出整数部分1 
0.4*2=0.8========取出整数部分0 
0.8*2=1.6========取出整数部分1 
0.6*2=1.2========取出整数部分1 
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

高工
2015-05-05 09:46:53     打赏
3楼

1个字节它不管怎么样还是只能表示256个数,因为有符号所以我们就把它表示成范围:-128-127。它在计算机中是怎么储存的呢?
可以这样理解,用最高位表示符号位,如果是0表示正数,如果是1表示负数,
剩下的7位用来储存数的绝对值的话,能表示27个数的绝对值,再考虑正负两种情况,
27*2还是256个数。首先定义0在计算机中储存为00000000,对于正数我们依然可以像无符号数那样换算,
从00000001到01111111依次表示1到127。那么这些数对应的二进制码就是这些数的原码。
到这里很多人就会想,那负数是不是从10000001到11111111依次表示-1到-127,那你发现没有,
如果这样的话那么一共就只有255个数了,因为10000000的情况没有考虑在内。
实际上,10000000在计算机中表示最小的负整数,就是这里的-128,而且实际上并
不是从10000001到11111111依次表示-1到-127,而是刚好相反的,从10000001到11111111依次
表示-127到-1。负整数在计算机中是以补码形式储存的,补码是怎么样表示的呢,
这里还要引入另一个概念——反码,所谓反码就是把负数的原码(负数的原码和和它的绝对值所对应的
原码相同,简单的说就是绝对值相同的数原码相同)各个位按位取反,是1就换成0,是0就换成1,
如-1的原码是00000001,和1的原码相同,那么-1的反码就是11111110,而补码就是在反码的基础上加1
,即-1的补码是11111110+1=11111111,因此我们可以算出-1在计算机中是按11111111储存的。
总结一下,计算机储存有符号的整数时,是用该整数的补码进行储存的,0的原码、补码都是0,
正数的原码、补码可以特殊理解为相同,负数的补码是它的反码加1。
下面再多举几个例子,来帮助大家理解!

十进制 → 二进制  (怎么算?要是不知道看计算机基础的书去) 
47   → 101111

有符号的整数    原码    反码    补码 
47      00101111  00101111  00101111(正数补码和原码、反码相同,不能从字面理解) 
-47      10101111  11010000  11010001(负数补码是在反码上加1)

 

现在知道了吧? 
6的原码是00000110 
6的反码是11111001 
反码+1以后表示负数 
11111010 
这就是-6


工程师
2015-05-05 10:25:30     打赏
4楼
哇塞 太详细了 真的非常感谢您,谢谢谢谢。

专家
2015-05-05 12:45:20     打赏
5楼
楼主需要补习基础啦

共5条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]