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.为什么?
的反向4294967295就是5927694924比的范围时unsigned int
在你的系统中,unsigned int是32-bit宽的,因此unsigned int可以表示的最大值是4294967295ie 0xFFFFFFFF.这就是为什么你的结果溢出而且剩余的32位被显示为输出的原因.
如果您代表5927694924十六进制表示,这是0x16151724C其有额外的33rd位1,其被丢弃,因此输出0x6151724C是1632727628十进制.
要打印在屏幕上,你需要像一个更大的数据类型unsigned long long或者uint64_t或者unsigned long(仅64位系统),无论你的编译器支持64位整数.
| 归档时间: |
|
| 查看次数: |
586 次 |
| 最近记录: |