我可以访问我正在运行的程序,对于某些事情我应该猜测一个非常低的数字并输出数字(可能是0或1)。但是,0.2%的时间应输出0,它输出的数字为4,294,967,286 - 4,294,967,295。 (注意:后者是无符号整数的最大数量)。
我GUESS正在发生的是函数猜测数据的数量小于0,又称-1到-9,当它将该数字分配给unsigned int时,它将数字包装为最大值或关闭到最大数量。
因此,我假设程序是用C语言编写的(我无法访问源代码),然后在Visual Studio .NET 2012 C中进行测试,如果我将各种负数分配给无符号整数,会发生什么。不幸的是,似乎没有任何事情发生 - 它仍然会将数字作为负整数输出到控制台。我想知道这是否与MSVS 2012试图变得聪明或者其他原因有关。
无论如何,我是否正确地假设这实际上是发生了什么以及程序输出unisnged int的最大数量的原因?或者,为什么会发生这种情况还有其他正当理由吗?
编辑:我想知道的是,假设尝试将负数分配给无符号整数会导致将整数设置为最大数量(即4,294,967,295)是否有效。如果这是不可能的那么好吧,我不是在查看SPECIFICS究竟为什么这会发生在程序中,因为我无法访问代码。所有我想知道的是,是否可能,因此可能解释为什么我得到这些结果。
答案 0 :(得分:2)
在C和C ++中,将-1分配给无符号数将为您提供最大的无符号值。
这是由标准保证的,我所知道的所有编译器(甚至VC)都正确地实现了这一部分。可能你的C示例有一些其他问题没有显示这个结果(不能说没看到代码)。
答案 1 :(得分:1)
你可以想到负数使其第一位计数为负数。
4位整数将是
Binary HEX INT4 UINT4
(In Memory) (As decimal) (As decimal)
0000 0x0 0 0 (UINT4_MIN)
0001 0x1 1 1
0010 0x2 2 2
0100 0x4 4 4
0111 0x7 7 (INT4_MAX) 7
1000 0x8 -8 (INT4_MIN) 8
1111 0xF -1 15 (UINT4_MAX)
可能是图书馆的标题对您而言,价值为负。
如果图书馆没有其他方法告诉您有关错误的信息,那么这可能是故意的错误值。我见过"荒谬的"之前以这种方式使用的值。
如果发生错误,错误可以计算为(UINT4_MAX - error)
或始终为UINT4_MAX。
真的,没有任何源代码,这是一个猜谜游戏。
编辑: 我稍微扩展了说明表。 如果要记录这样的数字,您可能希望以十六进制格式记录它。十六进制视图允许您在习惯时更快地查看内存。