int main返回-1时控制台显示返回值4294967295的原因是什么?
问题原因解答
- 补码的底层表示规则:代码中
main函数返回的-1是32位有符号整数,按照二进制补码的存储规则,32位有符号-1的二进制形式为全1,对应十六进制为0xFFFFFFFF。该二进制值如果按照32位无符号整数解析,结果就是4294967295,也就是你已知的2^32 - 1。 - Windows系统进程退出码的约定:即便是64位版本的Windows,系统也始终将进程的退出返回值定义为32位无符号整数类型,操作系统层面仅存储返回值的原始二进制位,不会主动区分返回值的有符号/无符号属性。
- Dev-C++控制台的打印逻辑:你使用的Bloodshed Dev-C++ v5.11版本在捕获进程退出码后,默认采用32位无符号整数的格式输出数值,所以最终打印出
4294967295,而非有符号的-1。
本质上这个现象只是对同一组二进制数据的解析规则不同导致的,你如果在Windows cmd中运行该程序后执行echo %errorlevel%,就会看到按有符号规则解析得到的返回值-1。
内容的提问来源于stack exchange,提问作者Ashish Jog
相关产品推荐
相关产品推荐

