为什么程序return -1或exit(-1)而获取到的值是255

为什么程序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。

转载于:https://my.oschina.net/zhangxu0512/blog/724022

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值