对于某些人来说,这可能是一个非常简单的问题,但是我对C ++还是陌生的,希望有人可以为我解答。
我正在使用此online C++ compiler。这是我正在其中运行的简单代码:
int main()
{
int x = 1- 2;
std::cout << x << std::endl;
return x;
}
输出为:
-1
...Program finished with exit code 255
Press ENTER to exit console.
那真的让我很思考。当main()
的值为-1时,为什么x
函数返回255?
main()
不返回int
(不是unsigned int
),所以它应该能够返回负数,对吧?
-1如何转换为255?与8位变量有关?但是int
类型不是16位吗?
答案 0 :(得分:1)
这实际上与C语言无关。操作系统或可能只是C运行时(一小段代码为您的C程序设置了东西,并实际上调用了 your main
函数)将程序的退出代码限制为无符号的8位数字。
当今几乎所有的系统都使用二进制补码表示负数,然后-1的位模式将数字的所有位都设为1。无论多少位,它们值均为-1时全部设置。
将int
转换为8位数字的最简单方法是仅取8个最低位(现在按照上述方法全为1),所以最终得到二进制数:
11111111
如果解释为无符号,则其十进制值恰好是255(作为有符号的8位仍为-1),您可以使用支持二进制的任何计算器(例如,在切换时使用Windows 10计算器应用程序)进行检查进入程序员模式)。
从相反的方向看待这个问题:当试图理解与计算机或编程相关的有趣数字时,将它们转换为二进制通常很有用。如果将255转换为二进制,则得到11111111,然后知道二进制数,则应将其理解为有符号的8位数字,即为-1。