所以,如果我理解正确,整数是一个字节的集合,它表示基数为二的格式,如果你愿意的话。
因此,如果我有unsigned int test = 0,那么它应该只包含一个位字段,所有这些都是零。然而,
unsigned int test=0;
test=~test;
产生 -1 。
我会认为这会用'1'
填充所有位,使整数与该系统上的整数一样大....
感谢您的帮助!
答案 0 :(得分:12)
如何打印价值?
如果它显示为“-1”或大的无符号整数只是在打印出来时解释的位的方式,则这些位本身不知道其中的差异。
您需要将其打印为unsigned
值。
另外,正如其他答案所指出的那样,你对系统如何存储数字有很多建议;不能保证数字和用于表示该数字的位之间存在特定的相关性。
无论如何,获取此值的正确方法是#include <climits>
,然后只使用UINT_MAX
。
答案 1 :(得分:4)
你没有正确理解。整数代表一个整数,就是这样。表示的细节不是标准的一部分(除了少数例外),并且您没有业务假设按位运算和整数值之间存在任何相关性。
(具有讽刺意味的是,标准 通过模块化算术规则所要求的是-1
转换为无符号整数 实际上是该值的最大可能值无符号类型。)
更新:为了澄清,我通常会说所有整数类型。如果你只使用无符号类型(我认为你不是因为你的否定答案),你在按位运算和代表值之间有一个明确定义的对应关系。
答案 2 :(得分:1)
或者您也可以使用:
unsigned int test =0;
test--;