C语言unsigned赋负值后以整型输出还是赋值。为什么?

还是负值。
类似的,如负整数后面加u赋给一个变量输出也是负值。为什么?

unsigned 定义的类型并不改变值在内存中的形式,这你要控制输出为无符号型的,就像是我们如果定义一个char类型的,输出如果用%d的话,那么显示的还是数字而不是字符。如果要输出无符号类型的话,请加u,如printf("%u",n);长整型的是%lu ,所以unsigned只是你希望定义的那个是无符号整型,但是输出语句还是按照它的理解来翻译,这就造成了一些小小的问题

就是要不要显示符号,只在于你输出的时候控制,而不在于你定义的时候如何定义。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-03-11
你说的太笼统 这是要分情况的 最好把你的具体调试过程说以下 :

--------------------------------------------
1.b=-10,则b的原码:1000 0000 0000 1010 补码:1111 1111 1111 0110

2.unsinged是无符号位的,我们知道unsigned int的值域是0~65535
那么1111 1111 1111 0110中最前面的1并不是符号位,而是值的最高位,但是输出的结果是b=
-10.
那么你应该是这样输出的:
printf("%d", b);
虽然b是unsigned型的,但是你是按有符号数输出的。想输出无符号数输出用%u。
也就是说 -10 在内存中的存储形式是一样的,不管是无符号还是有符号,都是以补码形式
1111 1111 1111 0110 存储的, 如果你用%d形式输出 那么取值时仍然将最高位当做符号位 所以输出还是负的 而你用%u来输出就会输出正数10
第2个回答  2011-03-10
输出的时候类型是由 printf 的格式串指定的:
看看这个运行的结果你就明白:
int main()
{
unsigned int i = -1;
printf( "%d, %u\n", i, i );
}
第3个回答  2011-03-10
能把你的程序给出来吗,我不知道你是怎么输出的……