0

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

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

unsigned int test=0;
test=~test;

产生-1

我原以为这会用 填充所有位'1',使整数在该系统上尽可能大....

谢谢你的帮助!

4

3 回答 3

12

你如何打印价值?

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

您需要将其打印为一个unsigned值。

此外,正如其他答案所指出的,您对系统如何存储数字有很多疑问;无法保证数字与用于表示该数字的位之间存在特定的相关性。

无论如何,获得这个值的正确方法是#include <climits>使用UINT_MAX.

于 2013-02-14T09:43:39.650 回答
4

你没有正确理解。整数表示整数,仅此而已。表示的细节不是标准的一部分(除了少数例外),您没有必要假设按位运算和整数值之间存在任何相关性。

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

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

于 2013-02-14T09:44:10.130 回答
1

或者,您可以使用:

unsigned int test =0;
test--;
于 2013-02-14T12:36:58.387 回答