【发布时间】:2017-02-17 11:59:41
【问题描述】:
以前有人问过这个问题,但我仍然很困惑。
我知道
unsigned int a = -1;
应该是UINT_MAX。但这并不是因为 -1 的所有位都已设置。 C11 说
如果新类型是无符号的,则通过重复添加或转换值 比新类型可以表示的最大值减一 直到值在新类型的范围内
所以让我们说UINT_MAX 是 100(我知道它应该大于 2^16-1,但现在让我们忽略它)
unsigned int a = -1; // will be
unsigned int a = -1 + UINT_MAX + 1; // 100 = UINT_MAX
标准只说UINT_MAX >= 2^16-1。但它是否说它应该是 2^n-1?
C++ 中的答案也不同?
【问题讨论】:
-
我认为该标准大多未指定(或平台相关)值的确切位表示。那里(已经)有一些非常奇怪的架构。
标签: c++ c language-lawyer