对于某些人来说,这可能是一个非常简单的问题,但是我是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位吗?
这实际上与C语言无关。操作系统或可能只是C运行时(为C程序设置内容并实际调用your main
函数的一小段代码)将程序的退出代码限制为无符号的8位数字。
今天几乎所有的系统都使用two'scomplement表示负数,然后-1的位模式将数字的所有位都设为1。无论多少位,它们都在何时设置值为-1。
[int
转换为8位数字的最简单方法是只取8个最低位(如上所述,现在全为1),所以最终得到二进制数:
11111111
如果解释为无符号,则其十进制值为255(作为有符号的8位,它仍为-1),您可以使用任何支持二进制的计算器(例如,在切换Windows 10计算器应用程序时进行检查)进入程序员模式)。
从相反的方向看待这个问题:当试图理解与计算机或编程相关的有趣数字时,将它们转换为二进制通常很有用。如果将255转换为二进制,则得到11111111,然后如果知道二进制数,则应将其理解为有符号的8位数字,即为-1。