鱼C论坛

 找回密码
 立即注册
查看: 2527|回复: 7

ASCII问题

[复制链接]
发表于 2013-12-10 11:54:09 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
小弟有个问题一直很困扰,有高人指点过,还是不懂。就是下面这个。(为什么要用256-191呢)
int a= -191; printf("%c",a); 输出结果为 A

我的疑问:A 的 ASCLL 码值对应的不是 65 吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-12-10 12:43:35 | 显示全部楼层
本帖最后由 amydog 于 2013-12-10 12:46 编辑

这个问题我想了好一会  你把-191转成二进制看是多少   在对照来看看   可能涉及到补码的知识   
汗  都是新手  悲催
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-12-10 13:28:22 | 显示全部楼层
也许是用%c格式打印,只截取了a的低8位吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-12-10 13:42:24 | 显示全部楼层
上面两位的加起来差不多就是正确答案
-191在内存中的补码表示为FFFFFF41
输出的时候用%c就只截取低8位,41的10进制就是65。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-12-11 17:46:00 | 显示全部楼层

很多高人都说是补码的问题,可惜自己还是不太懂。
谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-12-12 12:38:23 | 显示全部楼层
真心C语言 发表于 2013-12-11 17:46
很多高人都说是补码的问题,可惜自己还是不太懂。
谢谢

这个问题 昨天晚上埋头苦干,算是理解了

个人小心水仅供你参考下:

-191   的补码 根据 郝斌老师的讲解  先计算191的二进制是多少  (这个应该知道怎么算的吧,191除以2 取余 直到0为止  不过便于计算  往往是拿十进制 先转换为十六进制 也就是 BF  二进制为 1011  1111  

然后所有位取反   0100 0000      末尾+1    最终结果是 0100 0001     这个二进制对应的十进制就是65


额  做个补充   计算机int型一般都是占4个字节  也就是32位  用二进制表示也就是要占32位    32位的首字节  0表示是正数 1表示为负数   因为你是拿int类型强制转换为char型  char只占1字节  ,最终只能保持最后的1个字节 即 0100 0001     所以是65 char为A
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-12-12 17:13:34 | 显示全部楼层
amydog 发表于 2013-12-12 12:38
这个问题 昨天晚上埋头苦干,算是理解了

个人小心水仅供你参考下:

你的讲解很详细,我也明白了这个问题。可是看了之后,我又产生了新的问题。如下
int a=10;
printf("%d",a);
我们都知道结果是10.(这里为什么不计算10的补码呢)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-12-12 21:43:55 | 显示全部楼层
真心C语言 发表于 2013-12-12 17:13
你的讲解很详细,我也明白了这个问题。可是看了之后,我又产生了新的问题。如下
int a=10;
printf(" ...

呵呵 你钻牛角尖了  ,原始的问题是 a=-191  负数是这样来的  正数直接算二进制不就是了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-23 15:35

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表