老夏学院

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 534|回复: 0

计算一个32位二进制整数中1的个数,其中负数用补码表示

[复制链接]

304

主题

847

帖子

1082

G币

院长

Rank: 26Rank: 26Rank: 26Rank: 26Rank: 26Rank: 26

积分
1082

院长资深讲师

QQ
发表于 2023-7-17 14:41:00 | 显示全部楼层 |阅读模式
       计算一个32位二进制整数中1的个数,其中负数用补码表示

    计算机内部是使用补码来进行存储的。整数的原码、反码和补码都是一致的,而负数的原码、反码和补码是不一致的,所以要计算出负数的补码,可以将负数和32位二进制1相与,即可得到该负数的补码。
    解析代码如下:
  1. def compute(number):
  2.     # 如果为负数,则与32位二进制1相与
  3.     if number < 0:
  4.         # 0xffffffff相当于32位1
  5.         number = number & 0xffffffff
  6.     # 将0b两位去掉,得出二进制数长度
  7.     length = len(bin(number)) - 2
  8.     # 初始化计数器
  9.     count = 0
  10.     for i in range(0, length):
  11.         # 1和正数相与不等于0
  12.         if number & 2 ** i != 0:
  13.             count += 1
  14.     return count
  15. print(compute(13))
  16. print(compute(-13))
复制代码
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|老夏学院 ( 辽ICP备19020546号-1 )

GMT+8, 2024-5-5 00:00 , Processed in 1.068291 second(s), 20 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020.

快速回复 返回顶部 返回列表