这些值怎么得来的呀?

来源:百度知道 编辑:UC知道 时间:2024/05/17 23:36:16
#include <stdio.h>
int main (void)
{
double a=123456.789098765;
float b;
long c;
short i,j;
b=a;c=a;i=a;j=c;
printf("a=%f,b=%f,c=%d,i=%d,j=%d\n",a,b,c,i,j);
return 0;
}

编译运行后:
a=123456.789099,b=123456.789063,c=123456,i=-7616,j=-7616

请问下大家b的值和i,j的值分别怎么得来的呀?其他的我知道.这本书太不详细了,给我个例子说"请读者自己分析"...我汗.

你都能明白c=123456,那么i还是能明白的,i和j的道理相同。

123456的十六进制形式是0x1E240,在内存里面的字节顺序是0x40 0xE2 0x01 0x00这样的四个字节,当把它赋值给只有两个字节的short类型变量i和j时,只把前面两个字节赋值过去,赋值后i和j的内存空间字节是0x40 0xE2,十六进制数值结果是0xE240,如果无符号(%u)数输出就是57920,如果按有符号(%d)数输出就是-7616

两个知识点,一是内存里面整数的高低字节交换的,二是补码表示数的最高位为1表示负数。