c语言题 char c1,c2,c3; ci='x';c2=1000;c3=6.02e23 printf("%c%c%c\n",c1,c2,c3) c3

来源:学生作业帮助网 编辑:作业帮 时间:2024/05/02 00:48:57
c语言题 char c1,c2,c3; ci='x';c2=1000;c3=6.02e23 printf(

c语言题 char c1,c2,c3; ci='x';c2=1000;c3=6.02e23 printf("%c%c%c\n",c1,c2,c3) c3
c语言题 char c1,c2,c3; ci='x';c2=1000;c3=6.02e23 printf("%c%c%c\n",c1,c2,c3) c3

c语言题 char c1,c2,c3; ci='x';c2=1000;c3=6.02e23 printf("%c%c%c\n",c1,c2,c3) c3
c2和c3都有截断误差问题,但c2还牵扯负数存储的问题
1000的二进制是:1111101000,而一个char型字符的大小是1个字节(8位),当一个较大类型的值赋给较小类型的变量时,会产生截断误差,并且是这样处理:把较大类型的低位(截多少位要看较小类型是几位的,char是8位的,所以截取最后8位)截取下来赋值给c2,于是c2的二进制值是11101000,而char是带符号类型的(unsigned char 是不带符号的),计算机里规定最高位为符号位,为1的话该值就是个负数,为0的话是正数,且负数在计算机里一般是按补码存储的,而c2的原码为10011000,即-24,而一个字节的负数打出的字符好像都是问号
这样c3也就好理解了