这是错误的在MSDN文档
Is this wrong in MSDN document?
这是MSDN链接从http://msdn.microsoft.com/en-us/library/s3f49ktz (v = VS.80) . aspx
它说:Unsigned int: 4byte取值范围0到4,294,967,295
所以我的测试代码是:void main(void)
{
unsigned int sum; //4byte, 32bit
sum = 2147483648; //2^31 represent by 1 followed by 31 0s
printf("sum is %dn",sum);
sum = sum -1 ; //2^31-1 represent by 0 followed by 31 1s
printf("sum is %dn",sum);
getchar();
}
我确定4,294,967,295=2^32-1,printf将打印"0",转储最高有效位我认为MSDN应该写值范围:0到2147483647对吗?
文档是正确的。
-2147483648到2147483647 (231 - 1)是带符号的 int的范围。
0到4294967295 (232 - 1)是unsigned int的取值范围。
用%u
代替%d
printf("sum is %un",sum);
参见printf Type Field Characters
这是不正确的,如果你想得到4b你应该做
unsigned int sum;
sum = 0;
sum -= 1;
或者
unsigned int sum = -1; // will give the same result
这将为您提供unsigned int类型的正确最大值(尽管有点粗糙)。另外,正如其他人指出的那样,您应该在printf中使用%u作为格式化器,以便正确解释值。
unsigned int使用所有位作为幅度位,因此前导位不再被认为是符号位,因此变为2^32 - 1,而不仅仅是2^31 - 1
正如Sander提到的,您需要使用%u
而不是%d
,因为您正在查看无符号整数而不是有符号整数。
负数使用二进制补码存储,其中-1 = 0xFFFFFFFF, -2 = 0xFFFFFFFE,以此类推,至-2^32 = 0x80000000。
如果对unsigned int执行0xFFFFFFFF + 1操作,将会出现溢出(转储多余的位),结果变量为0。
相关文章:
- 正在查找文档以获得PS4平台的C++中的设备信息
- 如何在文档文件夹中创建目录
- 当Microsoft文档仅包含 C# 示例时,如何查找 C++ 包含文件名
- 通过构造函数创建一些值并尝试添加到文档中使用 rapidjson 不起作用
- 关于类的 Python 文档 - 对C++的引用不正确
- C++/autoconf 等效于文档库要求.txt的要求是什么?
- mbed:使用 USB 文档库编译会导致错误
- C++ VISUAL STUDIO:GLFWwindow没有初始化,即使它是在文档中编写的并且以前工作过
- 使用 yaml-cpp 更新 YAML 文档的节点和值
- 在加载 MSHTML 文档之前从 MSHTML 文档中删除无效的 URL
- 如何在C++中表示JSON文档的递归对象结构?
- 如何查找 Redshift Maya API 文档?
- 如何使用值模板编写文档测试用例?
- 如何使用 Gradle DSL(领域特定语言)上的文档?
- ncurses 找不到任何关于cchar_t的文档
- 提取狮身人面像文档中的C++代码片段
- PIMAGE_DOS_HEADER上缺少MSDN文档
- 生成的 doxygen 输出是否可以看起来像沙堡生成的 msdn 样式文档
- 这是错误的在MSDN文档
- WM_XBUTTONDOWN返回ATL/MSDN文档值之间的差异