白铯。。囙忆 发表于 2013-12-16 14:47:22

请问最后c2的值为什么是B 呢?

#include <stdio.h>
void main()
{
         int a,b = 322;
         float x,y = 8.88;
         char c1 ='k',c2;
          a = y;
          x = b;
          a = c1;
          c2 = b;
          printf("%d,%f,%d,%c\n",a,x,a,c2);
}
计算结果为 107,322.000000,107,B最后的B 不知道怎么得出来的 帮忙解释一下

不了缘_hy 发表于 2013-12-16 15:26:05

322应该是ascii(或者其他编码,例如GB2312什么的)码值

amydog 发表于 2013-12-16 16:02:31

本帖最后由 amydog 于 2013-12-16 16:15 编辑

丢失精度照成的b属于int类型Int类型占4个字节,char是占1个字节   真正的b 32位二进制实际只有最后的8位赋值给了char   


实际本人没测试理论上这样分析的   


补充:

322的二进制是101000010   后8位是1000010   转换为十进制就是66转换为char 就是B

白铯。。囙忆 发表于 2013-12-16 16:07:30

不了缘_hy 发表于 2013-12-16 15:26 static/image/common/back.gif
322应该是ascii(或者其他编码,例如GB2312什么的)码值

B 的 ASCII 值是98c2怎么算能得出98 呢

白铯。。囙忆 发表于 2013-12-16 16:13:26

amydog 发表于 2013-12-16 16:02 static/image/common/back.gif
丢失精度照成的b属于int类型Int类型占4个字节,char是占1个字节   真正的b 32位二进制实际只有最后 ...

也就是说 c2 的值 是不确定的就是原本float 型的b 在赋值给c2 的时候已经有数据丢失了 是吗?

白铯。。囙忆 发表于 2013-12-16 16:14:39

白铯。。囙忆 发表于 2013-12-16 16:13 static/image/common/back.gif
也就是说 c2 的值 是不确定的就是原本float 型的b 在赋值给c2 的时候已经有数据丢失了 是吗?

应该是intb的值

amydog 发表于 2013-12-16 16:17:22

白铯。。囙忆 发表于 2013-12-16 16:14 static/image/common/back.gif
应该是intb的值

补充:

322的二进制是101000010   后8位是1000010   转换为十进制就是66转换为char 就是B

不了缘_hy 发表于 2013-12-16 16:39:03

白铯。。囙忆 发表于 2013-12-16 16:07 static/image/common/back.gif
B 的 ASCII 值是98c2怎么算能得出98 呢

大写B是66。。。解决了问题就好

坏得掉渣了 发表于 2013-12-22 20:51:53

额,我想说的就是我需要中比较健康的生活,不能再这么沉沦了
页: [1]
查看完整版本: 请问最后c2的值为什么是B 呢?