【发布时间】:2021-09-14 18:46:00
【问题描述】:
您能否详细解释一下?
【问题讨论】:
-
编译器将截断该值以使其适合,但存储的值不会是 72368。
您能否详细解释一下?
【问题讨论】:
您可以尝试,但如果分配成功,它将不会存储您的整个原始数字,因为准确表示它需要超过 16 位。
16 位整数中的最高位是 215 位。 2 的 15 次方是 32768。将 16 位设置为全 1 将产生 65535 (32768 * 2 - 1),如果整数是无符号的,那么这是您可以可靠分配的最高数字。
无论如何,这很容易测试:
#include <stdio.h>
int main(void) {
unsigned short i = 72368;
printf("%d\n", i); // 6832
return 0;
}
请注意,72368 被解释为int,并且隐式转换为unsigned short,尽管编译器会警告您。 Try it online.
【讨论】:
uint16_t 更好吗?
uint16_t 相同的问题。
不,因为你可以用 16 位编码的最大值是 65535
【讨论】: