1. 理解整数的二进制表示
在计算机系统中,整数通常以二进制形式存储。理解整数的二进制表示是计算二进制中1的个数的基础。整数的二进制表示有三种形式:原码、反码和补码。
1.1 原码、反码和补码
原码是最直观的二进制表示方法。对于一个正整数,其原码就是其二进制形式,最高位为符号位(0表示正数,1表示负数)。例如:
- 7的原码:00000000 00000000 00000000 00000111(32位)
- -7的原码:10000000 00000000 00000000 00000111
反码是对原码的简单变换。正数的反码与原码相同,负数的反码则是符号位不变,其余位取反:
- 7的反码:00000000 00000000 00000000 00000111
- -7的反码:11111111 11111111 11111111 11111000
补码是现代计算机系统中实际使用的表示方法。正数的补码与原码相同,负数的补码是其反码加1:
- 7的补码:00000000 00000000 00000000 00000111
- -7的补码:11111111 11111111 11111111 11111001
注意:在计算机中,整数是以补码形式存储的。这是因为补码表示可以统一加减法运算,且能正确表示0(原码和反码中有+0和-0两种表示)。
1.2 补码的优势
补码表示法有几个重要优势:
- 统一了加减法运算,减法可以转换为加法
- 解决了原码和反码中+0和-0的问题
- 可以表示的范围比原码和反码多一个数(对于n位二进制,补码可表示-2^(n-1)到2^(n-1)-1)
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 计算二进制中1的个数的方法
计算一个整数二进制表示中1的个数是编程中常见的任务,特别是在嵌入式系统和底层编程中。下面介绍几种常见的方法。
2.1 方法一:逐位检查法
这是最直观的方法,通过一个掩码(mask)逐位检查每一位是否为1。以下是实现代码:
c复制int count_one_bits(int n) {
int count = 0;
unsigned int mask = 1; // 使用无符号整数避免符号扩展问题
for(int i = 0; i <
