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

快秋招啦,开始在牛客网上刷题,自己是渣渣,只能说任重而道远。

题目

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


这个代码通过率只有55%

后来我在网上找了别人通过的代码,发现自己没有考虑到负数的情况,
js无符号右移运算符的知识,需要补充一下:

该>>>运算符由三个大于号构成,是一个二进制运算符。
也就是对二进制数字进行操作,具有两大特点:
(1).首先,是无符号。
(2).其次,是右移。
二进制正负数表示法与十进制不同,十进制前面使用正负号表示(正号可以省略)。
二进制数字的最高位是符号位,正数的最高位是0,负数的最高位是1。
00000000000000000000000011111111
上面是32位二进制数字,转换成十进制是255。
所谓的右移是将二进制数字整体向右平移,但是位数保持不变。
也就是向右移动一位,那么右边的数字就会被切割掉一位,在左边再补充一位。
假如向右移动六位,上述二进制数字变为:
00000000000000000000000000000011
原来二进制数字的右边的六个1将被切掉,左边会补充6个0。
所谓的无符号,就是无论被右移的数字是正数还是负数,右移后,左边空出来的位用0填充。

在这里插入图片描述
这是修改后的,该操作符会将第一个操作数向右移动指定的位数。向右被移出的位被丢弃,左侧用0填充。因为符号位变成了 0,所以结果总是非负的。(译注:即便右移 0 个比特,结果也是非负的。即先将负数转化为很大的整数,再统计该整数中含有的1的个数

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值