为什么主函数不能返回负数?

问题描述 投票:2回答:1

对于某些人来说,这可能是一个非常简单的问题,但是我是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++
1个回答
1
投票

这实际上与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。

© www.soinside.com 2019 - 2024. All rights reserved.