为什么程序return -1或exit(-1)而获取到的值是255
今天用python获取C语言编写的可执行程序的返回值,发现一个问题,发现程序退出的时候"return -1;",而获取到的返回值是255。为啥不是-1呢?
查了一下资料,确定原因是系统用8bits的无符号数标识退出状态,所以退出的状态值为0至255。而-1用8bits的无符号数的值就是255。
需要说明一下的是:退出状态值不要大于255,因为只有8bits空间承载数值,所以大于255的数值会被截断,不能返回我们期望的数值。
下面针对性的做些测试:
1. 返回值是-1的情况
//程序: 打印设定数值的bit数值并返回
int main(void)
{
char var = -1;
int i;
for(i = 7; i >= 0; i--){
printf("%u ", (var & (0x01 << i)) >> i);
}
printf("\n");
return var;
}
[root@localhost tmp]# gcc -o test test.c && ./test
1 1 1 1 1 1 1 1
[root@localhost tmp]# echo $?
255
2. 若程序中返回大于255的场景
//返回值是256
int main(void)
{
short var = 256;
int i;
for(i = 15; i >= 0; i--){
printf("%u ", (var & (0x01 << i)) >> i);
}
printf("\n");
return var;
}
[root@localhost tmp]# gcc -o test test.c && ./test
0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0
[root@localhost tmp]# echo $?
0
可以看到返回值256的时候,返回值只截取了低8位,返回值是0。
//返回值是257
int main(void)
{
short var = 257;
int i;
for(i = 15; i >= 0; i--){
printf("%u ", (var & (0x01 << i)) >> i);
}
printf("\n");
return var;
}
[root@localhost tmp]# gcc -o test test.c && ./test
0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1
[root@localhost tmp]# echo $?
1
可以看到返回值257的时候,返回值只截取了低8位,返回值是1。