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

来源:学生作业帮助网 编辑:作业帮 时间:2024/07/16 23:47:21
c语言题 char c1,c2,c3; ci='x';c2=1000;c3=6.02e23 printf(
xSn@J+ŘKIi!J]rRHK4`6(?3w<^ cӀ{Ϝ{fÉ(ƐSG>'}$ E""wCDdY` Y9PD2"뙏o֟o^HI/XCe;rÀȩPK,QR;w}P]x=>Bjy= Y$*Q3ÉaXoHv(/=(SӾ!WRs~Wgk\ӝj+ 'Ԭ_$B?3:wFq[\ KH7K#kलA,@3/Ze$(g*`vA>~z!.j7EXrr%9?u׊.H%7:8o ^ D]ᵇU!iuyFT~ձ[G)r- Pi".Te9MvxMW tDu.hz7M o |WK

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也就好理解了