c++ - 为什么main函数不能返回负数?

标签 c++

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

这让我深思。当 x 的值为 -1 时,为什么 main() 函数会返回 255?

main() 不返回 int(不是 unsigned int),所以它应该能够返回负数,对吧?

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

最佳答案

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

今天几乎所有系统都使用二进制补码表示负数,然后 -1 的位模式是让数字的所有位都为 1。不管有多少位,它们值为-1时全部设置。

int 转换为 8 位数字的最简单方法是只取最低的 8 位(按照上面的说法现在都是 1),所以你最终得到二进制数:

11111111

如果解释为无符号,那么它的十进制值恰好是 255(作为带符号的 8 位它仍然是 -1),您可以使用任何支持二进制的计算器(例如切换时的 Windows 10 计算器应用程序)进行检查它到程序员模式)。


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

关于c++ - 为什么main函数不能返回负数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58443232/

相关文章:

c++ - 如何调试FindFirstChangeNotification获取的文件变化通知?

c++ - 在 Linux 中记录和绘制引导过程信息

c++ - 不可能使 <list <list< int* >> 工作

c++ - 如何在 Windows 上设置 UDP 源地址

c++ - 在 C++ 中多次运行按引用选择排序函数

c++ - 我如何遍历 map vector

c++ - 将 OpenCV Mat 图像转换到 QImage 时警告使用旧式转换?

c++ - 为什么 QMediaPlayer::duration() 给我的值为 -1?

c++ - pthreads 中的内存模型规范

c++ - 将 protected 析构函数虚拟化是否有用?