func NumberOf1n intint m=n ans=0 for m0 ans+=m&1 m=1 ifn0 return -ans-1 return ans答案错误
这段代码实现了求一个整数的二进制表示中1的个数。但是对于负数的情况,结果是错误的。
负数在计算机中的表示是用补码表示的,补码是将其正数的二进制表示取反,然后再加1。在进行位运算时,负数的二进制表示是按补码运算的。所以,对于负数的操作,需要先将其转换为补码表示,然后再进行位运算。
以下是修改后的代码:
func NumberOf1(n int) int {
m := n
ans := 0
if n < 0 {
m = -n - 1
}
for m > 0 {
ans += m & 1
m >>= 1
}
return ans
}
通过判断n是否小于0,如果是负数,则将m赋值为-n-1,这样可以得到负数的补码表示。然后再进行位运算,最后返回结果。
原文地址: http://www.cveoy.top/t/topic/iePv 著作权归作者所有。请勿转载和采集!