为什么主函数不能返回负数? 对于一些人来说这可能是一个很简单的问题,但是我对C++是新的,希望有人能回答我。

为什么主函数不能返回负数? 对于一些人来说这可能是一个很简单的问题,但是我对C++是新的,希望有人能回答我。,c++,C++,我在用这个。下面是我在其中运行的简单代码: int main() { int x = 1- 2; std::cout << x << std::endl; return x; } 这真让我深思。为什么main()函数在x的值为-1时返回255 不main()返回int(不是无符号int),所以它应该能够返回负数,对吗 如何将-1转换为255?与8位变量有关吗?但是int类型不是16位吗?这实际上与C语言无关。操作系统,或者可能只是C运行时(为C程

我在用这个。下面是我在其中运行的简单代码:

int main()
{
    int x = 1- 2;
    std::cout << x << std::endl;
    return x;
}
这真让我深思。为什么
main()
函数在
x
的值为-1时返回255

main()
返回
int
(不是
无符号int
),所以它应该能够返回负数,对吗


如何将-1转换为255?与8位变量有关吗?但是
int
类型不是16位吗?

这实际上与C语言无关。操作系统,或者可能只是C运行时(为C程序设置内容并实际调用
main
函数的一小段代码),将程序的退出代码限制为无符号8位数字

现在几乎所有的系统都对负数使用2的补码表示法,-1的位模式是将数字的所有位都设为1。不管有多少位,它们都是在值为-1时设置的

将一个
int
转换为8位数字的最简单方法是只取8个最低位(根据上面的说明,现在都是1),因此最终得到的是二进制数字:

11111111
若解释为无符号,那个么它的十进制值恰好是255(有符号的8位仍然是-1),你们可以用任何支持二进制的计算器(比如当你们切换到程序员模式时的Windows10CalculatorApp)来检查它



从相反的方向来看:当试图理解与计算机或编程相关的有趣数字时,将它们转换成二进制通常是有用的。如果将255转换为二进制,则得到11111111,然后如果知道二进制数,则应意识到如果将其解释为有符号8位数字,则为-1。

但int type不是16位吗?它通常比现代CPU的大。尽管micro控制器的返回值可能是16位。您可能会在这里得到答案:返回类型确实是
int
,但在unix系统上,程序返回值无论如何都是一个无符号8位整数,因此从0到255。在Windows上尝试它,您将得到-1@phuclv在Windows上,进程的退出代码是32位无符号整数。请参阅和。
11111111