作者final01 (牛顿运动定律)
看板C_and_CPP
标题[问题] C unsigned long的问题
时间Mon Jul 17 22:35:12 2017
开发平台(Platform): (Ex: Win10, Linux, ...)
Linux
编译器(Ex: GCC, clang, VC++...)+目标环境(跟开发平台不同的话需列出)
GCC
额外使用到的函数库(Library Used): (Ex: OpenGL, ...)
问题(Question):
#include <stdio.h>
void print_x(unsigned long x)
{
printf("=> 0x%lx\n",x);
}
int main()
{
print_x(0x80000000);
print_x((1<<31));
}
想问为何同样是数字一个不会overflow 一个会??
喂入的资料(Input):
0x80000000
1<<31
最近看到别人写的code都会用1UL << 31应该也是怕overflow ??
预期的正确结果(Expected Output):
=> 0x80000000
=> 0x80000000
错误结果(Wrong Output):
=> 0x80000000
=> 0xffffffff80000000
程式码(Code):(请善用置底文网页, 记得排版)
补充说明(Supplement):
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 1.164.70.71
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1500302114.A.2FA.html
1F:→ JFLung9536: 第二个拆成两行做 07/17 23:11
2F:推 LPH66: 因为你单写 1 的型态是 int, 写 1UL 才是 unsigned long 07/18 00:04
3F:→ LPH66: 0x80000000 则比较有趣, int 装不下, 它变成 unsigned int 07/18 00:06
4F:推 Qbsuran: overflow是当一组byte要解析成sigined或unsigned才会发 07/18 01:54
5F:→ Qbsuran: 生 07/18 01:54