python里的class solution是什么意思_剑指 Offer-求二进制中 1 的个数(Python 实现过程遇到的问题)...

输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。

思路需要一个循环结构,不断对输入数进行 无符号 右移动。

在循环体的结构当中,使用适当的过滤器(1 这个整数)对输入数进行 逻辑与(&)操作:结构为 1 的时候计数(count)增加 1;否则选择跳过继续执行循环 结构。

当 无符号右移 操作执行到终点时候(输入数变成 0),终止循环,同时返回最终计数的变量。

位运算基础知识

计算机对有符号数(包括浮点数)的表示有三种方法:原码、反码和补码(补码 =反码 + 1)。在 二进制里,是用 0 和 1 来表示正负的,最高位为符号位,最高位为 1 代表负数,最高位为 0 代表正数。以 8 位的 byte 为例,最大值为:0111,1111,最小值为 1000,0000。

以此类推,在 Integer 的情况下,-5(toBinaryString)的结果为:1111,1111, 1111,1111,1111,1111,1111,1011。

右移

打印 -3 >> 1:-2。这里看一下具体的计算过程(正数左补 0,负数左补 1):Integer.toHexString(-3) 得到 3 的 16 进制:0xfffffffd(此为-3的补码,计算机中负数用补码表示)。

将其转换成2进制为1111,1111,1111,1111,1111,1111,1111,1101。

右移一位得到:1111,1111,1111,1111,1111,1111,1111,1110,显而易见此为-2补码。

左移

打印 -3<<1&#

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值