C ++为什么这不提供整数的系统最大大小?

时间:2013-02-14 09:42:21

标签: c++ c integer bit-manipulation

所以,如果我理解正确,整数是一个字节的集合,它表示基数为二的格式,如果你愿意的话。

因此,如果我有unsigned int test = 0,那么它应该只包含一个位字段,所有这些都是零。然而,

unsigned int test=0;
test=~test;

产生 -1

我会认为这会用'1'填充所有位,使整数与该系统上的整数一样大....

感谢您的帮助!

3 个答案:

答案 0 :(得分:12)

如何打印价值?

如果它显示为“-1”或大的无符号整数只是在打印出来时解释的位的方式,则这些位本身不知道其中的差异。

您需要将其打印为unsigned值。

另外,正如其他答案所指出的那样,你对系统如何存储数字有很多建议;不能保证数字和用于表示该数字的位之间存在特定的相关性。

无论如何,获取此值的正确方法是#include <climits>,然后只使用UINT_MAX

答案 1 :(得分:4)

你没有正确理解。整数代表一个整数,就是这样。表示的细节不是标准的一部分(除了少数例外),并且您没有业务假设按位运算和整数值之间存在任何相关性。

(具有讽刺意味的是,标准 通过模块化算术规则所要求的是-1转换为无符号整数 实际上是该值的最大可能值无符号类型。)

更新:为了澄清,我通常会说所有整数类型。如果你只使用无符号类型(我认为你不是因为你的否定答案),你在按位运算和代表值之间有一个明确定义的对应关系。

答案 2 :(得分:1)

或者您也可以使用:

unsigned int test =0;
test--;