int类型在主流系统中为32位有符号整数,采用补码表示:正数符号位为0,负数符号位为1且按“取反加1”规则编码;其位运算(&、|、^、~、)直接操作二进制位,常用于奇偶判断、置位、交换、统计差异位等。

int 类型在主流系统中通常是 32 位有符号整数,它的二进制表示和运算都围绕“补码”展开——这是现代计算机实际存储和计算负数的标准方式。
int 的二进制结构:32 位 + 补码
一个 int 占 4 字节(32 bit),最高位(第 31 位,从 0 开始编号)是符号位:
- 符号位为 0 → 正数或零,其余 31 位直接表示数值(即原码 = 补码)
- 符号位为 1 → 负数,整个 32 位按补码规则解释:先取反再加 1,得到对应正数的绝对值
- 例如:5 的二进制是
00000000 00000000 00000000 00000101;-5 的补码是11111111 11111111 11111111 11111011 - 最大值是
0x7FFFFFFF(即 2¹⁵−1 = 2147483647),二进制为01111111111111111111111111111111 - 最小值是
0x80000000(即 −2³¹ = −2147483648),二进制为10000000000000000000000000000000
关键位运算符及其用途
对 int 进行位操作时,本质是在操作其 32 位二进制形式。常用运算符逻辑清晰、效率高:
-
&(按位与):常用于提取特定位(如
n & 1判断奇偶)、清零某些位(n & ~mask) -
|(按位或):常用于置位(如
n | 0x01把最低位置 1) -
^(按位异或):相同为 0、不同为 1;可用于交换变量(无需临时变量)、统计不同比特位数(
m ^ n再数 1 的个数) -
~(按位取反):对所有位翻转;注意
~n + 1 == -n,这是补码定义决定的 -
>(左移 / 右移):左移 n 位 ≈ ×2ⁿ;右移是算术右移(符号位填充),
n >> 1相当于向下取整除以 2
两个 int 比较有多少位不同
这是典型位运算应用题,核心思路是异或后统计 1 的个数:
- 先算
diff = m ^ n:相同位得 0,不同位得 1 - 再统计
diff中 1 的个数,推荐用diff & (diff - 1)清零最低位 1,循环直到为 0 - 例如:
m=5(0101), n=3(0011)→diff=6(0110)→ 有两个 1 → 结果为 2
负数的二进制不是简单加个负号
初学者容易误解负数就是“符号位 + 绝对值原码”,但硬件不这么存:
- −1 的二进制不是
1000…001,而是11111111 11111111 11111111 11111111 - 验证:对 −1 补码取反加 1,正好得 1;且
(−1) + 1 == 0在二进制加法中自然成立(溢出忽略) - 补码让加减统一成加法电路,也消除了 +0 和 −0 的歧义











