【求助】:C语言数据转换问题!●●●●●●●

来源:百度知道 编辑:UC知道 时间:2024/05/27 05:31:34
例题如下:
#include <stdio.h>
int main(void)
{
unsigned short us1=32767,us2=65535,us;
signed short ss=-7;
us=ss;
printf("(1)ss=%d,us=%d\n",ss,us);
ss=us1;
printf("(2)us1=%d,ss=%d\n",us1,ss);
ss=us2;
printf("(3)us2=%d,ss=%d\n",us2,ss);
return 0;
}
程序执行结果理论上应该是:
(1)ss=-7,us=65529
(2)us1=32767,ss=32767
(3)us2=65535,ss=-1
但是我在TurboC上运行的结果是:
(1)ss=-7,us=-7
(2)us1=32767,ss=32767
(3)us2=-1,ss=-1

这是为什么呢?我之前不是定义了us为unsigned类型吗?怎么会是负数呢?
楼下的没明白我的意思!
即便我用%d输出,us的值也应该是无符号的十进制数,我之前定义了us的数据类型为无符号的,为什么输出的时候它会变成有符号的整数呢?
这是书上的一道例题,如果我用%u来转换数据类型的话确实能满足我的要求,那么之前定义unsigned和signed有什么意义呢,不定义有无符号只用%u格式输出一样能达到我要求的结果。

即使你设置了他为unsigned型,但你使用%d格式输出他就会输出-7,也就是说你用%d就是对他的格式进行了转化.如果你要输出无符号数的话,把语句改为:
printf("(1)ss=%d,us=%u",ss,us);
printf("(3)us2=%u,ss=%d",us2,ss;

输出使用%u输出无符号数。
u 以无符号十进制形式输出整数

这个东西是因为负数是以补码形式存在计算机里面的,.你的-7的补码在计器里面输出为一个正数..所以把你补码的数直接算成正数..所以为成为你得到的这个数..
是因为定义的类型不统一产生的..

超出有符号数的表示范围.....
最高位被当作有符号来处理...