【发布时间】:2021-06-13 12:07:35
【问题描述】:
unsigned short 上限为 65535,超过此数字以 0 开头;
unsigned short a = 65535;
printf("%d", a);
a = 65535
unsigned short a = 65536;
printf("%d", a);
a = 0
unsigned short a = 65537;
printf("%d", a);
a = 1
等等
但是......当声明带有计算(pow、乘法、加法等)时,数字没有超过上限。
unsigned short a = pow(2, 16) - 1;
printf("%d", a);
a = 65535
unsigned short a = pow(2, 16);
printf("%d", a);
a = 65535
unsigned short a = pow(2, 17);
printf("%d", a);
a = 65535 ...等等。
出现这种情况的原因是什么?
【问题讨论】:
-
@Cheatah 这不是问题所在。大多数现代编译器即使使用 -O0 也根本不会调用 pow。