max unsigned int的反向数字

use*_*281 2 c unsigned-integer

我尝试编写一个程序来反转用户输入的数字.

用户输入范围是0 <a <4294967295,这里是EDITED代码.

unsigned long int reverseNumber(unsigned long int num)
{
    unsigned long int rev = 0;

    while (num > 0)
    {
        rev = rev *10 + (num%10);
        num = num/10;
    }

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

问题是当我输入4294967295时,它会输出1632727628.为什么?我不知道为什么会这样.我怎样才能撤销4294967295.

我使用%lu将其更改为unsigned long int,printf,但仍然输出1632727628.为什么?

Don*_*ild 7

的反向4294967295就是5927694924比的范围时unsigned int

在你的系统中,unsigned int32-bit宽的,因此unsigned int可以表示的最大值是4294967295ie 0xFFFFFFFF.这就是为什么你的结果溢出而且剩余的32位被显示为输出的原因.

如果您代表5927694924十六进制表示,这是0x16151724C其有额外的33rd1,其被丢弃,因此输出0x6151724C1632727628十进制.

要打印在屏幕上,你需要像一个更大的数据类型unsigned long long或者uint64_t或者unsigned long(仅64位系统),无论你的编译器支持64位整数.