ASCII问题
小弟有个问题一直很困扰,有高人指点过,还是不懂。就是下面这个。(为什么要用256-191呢)int a= -191; printf("%c",a); 输出结果为 A
我的疑问:A 的 ASCLL 码值对应的不是 65 吗
本帖最后由 amydog 于 2013-12-10 12:46 编辑
这个问题我想了好一会你把-191转成二进制看是多少 在对照来看看 可能涉及到补码的知识
汗都是新手悲催
也许是用%c格式打印,只截取了a的低8位吧 上面两位的加起来差不多就是正确答案
-191在内存中的补码表示为FFFFFF41
输出的时候用%c就只截取低8位,41的10进制就是65。。。 amydog 发表于 2013-12-10 12:43 static/image/common/back.gif
这个问题我想了好一会你把-191转成二进制看是多少 在对照来看看 可能涉及到补码的知识
汗都是新 ...
很多高人都说是补码的问题,可惜自己还是不太懂。
谢谢 真心C语言 发表于 2013-12-11 17:46 static/image/common/back.gif
很多高人都说是补码的问题,可惜自己还是不太懂。
谢谢
这个问题 昨天晚上埋头苦干,算是理解了
个人小心水仅供你参考下:
-191 的补码 根据 郝斌老师的讲解先计算191的二进制是多少(这个应该知道怎么算的吧,191除以2 取余 直到0为止不过便于计算往往是拿十进制 先转换为十六进制 也就是 BF二进制为 10111111
然后所有位取反 0100 0000 末尾+1 最终结果是 0100 0001 这个二进制对应的十进制就是65
额做个补充 计算机int型一般都是占4个字节也就是32位用二进制表示也就是要占32位 32位的首字节0表示是正数 1表示为负数 因为你是拿int类型强制转换为char型char只占1字节,最终只能保持最后的1个字节 即 0100 0001 所以是65 char为A amydog 发表于 2013-12-12 12:38 static/image/common/back.gif
这个问题 昨天晚上埋头苦干,算是理解了
个人小心水仅供你参考下:
你的讲解很详细,我也明白了这个问题。可是看了之后,我又产生了新的问题。如下
int a=10;
printf("%d",a);
我们都知道结果是10.(这里为什么不计算10的补码呢) 真心C语言 发表于 2013-12-12 17:13 static/image/common/back.gif
你的讲解很详细,我也明白了这个问题。可是看了之后,我又产生了新的问题。如下
int a=10;
printf(" ...
呵呵 你钻牛角尖了,原始的问题是 a=-191负数是这样来的正数直接算二进制不就是了
页:
[1]