这段代码实现了求一个整数的二进制表示中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,这样可以得到负数的补码表示。然后再进行位运算,最后返回结果。

func NumberOf1n intint m=n ans=0 for m0 ans+=m&1 m=1 ifn0 return -ans-1 return ans答案错误

原文地址: http://www.cveoy.top/t/topic/iePv 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录