第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 );
}