32位机器int变量的最大值和最小值

对于32位(即4个字节)有符号的int变量来说:

  1. 最高位用来表示正负性,1表示为负,0表示为正。
  2. 最大值:符号位置为0后,还剩下31位,这31位可以组成的二进制数的个数为2 ^ 31 = 2,147,483,648。由于000 0000 0000 0000 0000 0000 0000 0000这种情况需要用来表示数值0,所以还剩下2,147,483,647个数可以表示,所以最大值为2,147,483,647
  3. 最小值:同样的,符号位置为1后,还剩下31位,可以表示2,147,483,648个数,因为在C++中负数是以补码形式存储的,-0和0的补码是一样的。为了不造成资源的浪费,将1000 0000 0000 0000 0000 0000 0000 0000这个二进制数用来表示-2,147,483,648,即为最小值。
    总结:32位机器上有符号int取值范围为[-2147483648,2147483647]。
    对于32位(即4个字节)无符号的int变量来说:
    最大值为2 ^ 32 - 1, 取值范围为[0, 2 ^ 32 - 1]。
    更详细的解释可以看我的另一篇博客:C++中负数和补码的关系文末的内容。
  • 5
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
在Java中,int类型占用4个字节,即32位,而long类型占用8个字节,即64位。如果要将一个64位的long类型数据转成两个32位int类型数据,可以使用位运算符。具体地,可以将这个64位数据分成高32位和低32位,然后分别转成两个int类型数据。 可以使用以下代码将一个long类型数据转成两个int类型数据: ``` long num = 1234567890123456789L; // 要转换的long类型数据 int high = (int) (num >> 32); // 高32位 int low = (int) num; // 低32位 ``` 其中,`>>`是右移位运算符,表示将二进制数向右移动指定的位数,被移出的位丢弃,空位补0。在这里,将num向右移动32位,即得到了高32位。由于num是long类型,所以需要将其转成int类型,可以使用强制类型转换。而对于低32位,直接将num转成int类型即可。 如果要将两个int类型数据还原成一个long类型数据,可以使用以下代码: ``` int high = 12345678; // 高32位 int low = 90123456; // 低32位 long num = ((long) high << 32) + (low & 0xFFFFFFFFL); // 合并成long类型数据 ``` 其中,`<<`是左移位运算符,表示将二进制数向左移动指定的位数,空位补0。在这里,将high向左移动32位,即得到了高32位。由于high是int类型,所以需要将其转成long类型,以免发生溢出。而对于低32位,需要将其转成long类型,并使用按位与运算符`&`将其与0xFFFFFFFFL相与,以消除高32位的影响。最后,将两个32位数据合并成一个64位数据即可。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值