【C++ - 16】判断操作系统是16位还是32位

 

法一:利用sizeof

可以使用sizeof计算int的字节长度来判断是32位还是16位。

32位机器下:sizeof(int) = 4;16位机器下:sizeof(int) = 2

但是实际中可能64位的机器sizeof(int)也是4字节,因为很多时候是编译器决定要占用几个字节

 

法二:利用最大值

1. 机器位数不同则表示的数字的最大值是不同的。

    32位机器下int的最大值为2147483647,16位机器下int的最大值是32767

2. 我们可以利用最大值是否溢出情况来判断

    定义一个变量num赋值32768,如果是16位机器这个时候超过了int最大值变成了-32768,如果是32位机器不会超过

 

int main(){
    //判断机器是16位还是32位
    int num = 32768;
    if(num > 32767){
        printf("32位机器\n");
    }
    else{
        printf("16位机器\n");
    }
    return 0;
}


法三:对0取反

 

1. 32位机器下无符号整型的数值范围是[0,4294967295],16位机器下无符号整型的范围是[0,65535]

2. 0的二进制是所有位都是0

    32位下对0取反的结果是所有位都是1,如果把这个数赋值给一个无符号整型变量num,则num值为4294967295

    16位下对0取反的结果是所有位都是1,如果把这个数赋值给一个无符号整型变量num,则num值为65535

3. 利用对0取反后的结果赋值给无符号整型变量来判断值是否大于65535即可

 

int main(){
    unsigned int num = ~0;
    if(num > 65535){
        printf("32位机器");
    }
    else{
        printf("16位机器");
    }
    return 0;
}

 

 

 

 

 

  • 8
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值