c语言中有关二进制,ascii码和内存的问题

[复制链接]
查看11 | 回复2 | 2011-5-18 11:22:34 | 显示全部楼层 |阅读模式
小弟有个问题很困惑,就是在定义数据时,如定义了一个数组chara[10];在从键盘输入的时候每输入一个字符,他就会对应ascii码表的十进制,在转换成二进制储存到内存中,而定义整形数据的时候,是不是直接把输入的数据转换成二进制再储存到内存中,跟ascii码表没联系?不好意思,小弟没分了,请高手给看看,谢谢!
回复

使用道具 举报

千问 | 2011-5-18 11:22:34 | 显示全部楼层
电脑中存储都是二进制,或者说,以字节来论的话,是16进制数。
键盘输入后,被操作系统转成输入字符的ASCII码值,放在缓冲区中。(这也是16进制的哦)
你的程序中给变量输入值,全是输入函数做的。
scanf(\"%c\",它就把缓冲区中的值直接放入a[0]中
scanf(\"%d\",它就把缓冲区中的几个值转换合成一个整型值给b
比如输入12缓冲区中是0x310x32函数把0x3100x32转换成0x0c给变量b
别的输入类型也是一样,相应的转换。
别看存储的是0x0c给b你输出时printf(\"%d\",b)输出会是12
输出的是10进制数,这全是函数做的,实际存储都是16进制的。或者说是二进制的。

ASCII码表,只是字符与数值的对应关系表,并不是说ASCII码是10进制数。
是以数的大小来说的。不在于是几进制。比如字符\'0\'ASCII码是48也是0x30只是进制不同,大小48跟0x30是相等的。









<h4class=\"ask\">追问


高手,我是这样理解的,如scanf(\"%s\",输入12则把12看成是1和2这两个字符,并参照ascii码表的十进制49和50并分别转换成二进制分别存放在a[0]和a[1]这两个中吧?char类型只占一个字节,所以跟ascii码表对应,可是如果用scanf(\"%d\",输入12的话,
那应该怎么理解,你上面的理解我有一点理解,但是他不会和ascii码混在一起吗?16进制和2进制的都是同一个道理吧(请高手帮帮我吧,我都郁闷死了
回复

使用道具 举报

千问 | 2011-5-18 11:22:34 | 显示全部楼层
上面说了,输入12在缓冲区里的都是1和2的ASCII值也就是0x31和0x32两个数
输入进去,怎么存是函数scanf()根据参数的格式符决定的。
整型就会先从缓冲区取出字符0x31判断是一个数字(\'0\'--\'9\'之间的字符)就会得到10x31-\'0\'=1,然后再从缓冲区里取下一下值0x32也是数字,把前面的1乘以10得到0x0A再加上0x32-\'0\'=2就会得到0x0c,然后再从缓冲区里取值,会取到一个回车,不是数字,则输入数字就结束,把得到的0x0c存入b中。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行