关于C整数类型和printf()说明符的奇怪问题

car*_*995 0 c integer

好吧,我知道这个问题可能有些奇怪,但我还是想揭开它的神秘面纱.

1.)intC中的类型可以存储-2147483648到2147483647范围内的数字.

2.)如果我们在unsigned它前面添加它,范围将变为0到2147483647.

3.)问题是,unsigned当下面的代码实际可行时,为什么我们甚至懒得使用关键字.


代码:

#include <stdio.h>

int main(void)
{
    int num = 2147483650;

    printf("%u\n" , num);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)


4.)如你所见,如果我使用说明%u符,我仍然可以将整数打印为无符号类型,它将打印出值2147483650.

5.)即使我创建了另一个带有值的整数类型50并将其总结num,虽然它已经溢出但是我仍然可以通过使用%u说明符打印出正确的和值.所以为什么unsigned关键字仍然是必需的?

感谢您花时间阅读我的问题.

Oli*_*rth 5

  1. 不,这仅适用于某些平台(其中int32位,2位补码).

  2. 不,在这种情况下,范围将是0到4294967295.

  3. 该代码表现出未定义的行为.

  4. 见3.

  5. 见2.和3.