Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 最大无符号整数的反向数_C_Unsigned Integer - Fatal编程技术网

C 最大无符号整数的反向数

C 最大无符号整数的反向数,c,unsigned-integer,C,Unsigned Integer,我试着写一个程序来反转用户输入的数字 用户输入范围为0

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

用户输入范围为0
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;
}
问题是当我输入4294967295时,它将输出1632727628。 为什么?我不知道为什么会这样。 我怎样才能倒4294967295


我使用%lu将其更改为无符号长整型,printf,但仍然输出1632727628。为什么?

4294967295
相反的是
5927694924
,它大于
无符号整数的范围

在您的系统中,
unsigned int
的宽度为
32位
,因此
unsigned int
可以表示的最大值为
4294967295
,即
0xFFFFFFFF
。这就是结果溢出的原因,而
32
位中剩余的内容将显示为输出

如果用十六进制表示
5927694924
,则为
0x16151724C
,它有额外的
33位
1位
,该位被丢弃,因此输出为
0x6151724C
,十进制为
1632727628


要在屏幕上打印,您需要更大的数据类型,如
unsigned long long
uint64\t
unsigned long
(仅限64位系统),无论编译器支持什么
64
位整数。

4294967295的反面是5927694924,大于4294967295,这是可以存储在32位上的最大整数

问题是当我输入4294967295时,它将输出1632727628。为什么?

unsigned int
可以存储
2^32-1
最大值。
4294967295
的反面是
5927694924
,它比
2^32-1
大得多。因此,输出是
1632727628
16327277628实际上是
5927694924%4294967296


要解决此问题,您应该使用
无符号长it
。但是,如果数字大于最大长度,它将再次溢出。

发生整数溢出。只需将int转换为字符数组,并从头开始打印。但我将其更改为无符号长int,它仍然输出相同的答案。为什么?不,这不仅仅是简单的减法(在这种情况下,结果可能是一样的)。它实际上是模,即
5927694924%4294967295
。但我将其更改为无符号长整型,它仍然输出相同的答案。为什么?@MattMcNabb:现在无法编辑我的评论,但我明白你的意思。仅适用于32位系统,但我将其更改为unsigned long int,它仍然输出相同的答案。为什么?@user2301281因为
unsigned long
通常与
unsigned int
相同,但我将其更改为unsigned long int,它仍然输出相同的答案。为什么?@user2301281因为
unsigned long int
也是32位的。您需要更改为无符号长整型,它是64位。不,我更改为无符号长整型,它的输出是547093574220。@user2301281您在任何地方都更改了它吗?我发现了错误,我忘了将数组指定为无符号长整型。对不起,谢谢=D