n为负数时,输出不一样是因为在负数的二进制表示中,最高位为1,表示为负数的符号位。因此,在进行位运算时,负数的二进制表示会有不同的处理方式。

在Go语言中,按位与运算符(&)会将负数转换为其补码形式,然后进行按位与运算。因此,对于负数n,n&=n-1操作会将负数n的二进制表示中的最低位1变为0,同时将符号位保持不变,得到一个新的二进制数。

而在C++中,按位与运算符(&)不会将负数转换为其补码形式,而是直接对负数的二进制表示进行按位与运算。因此,对于负数n,n&=n-1操作会将负数n的二进制表示中的最低位1变为0,同时保持符号位不变,得到一个新的二进制数。

因此,在Go语言中,负数的二进制表示会被当作补码进行处理,而在C++中,负数的二进制表示直接进行按位与运算。这就导致了在n为负数时,输出会有不同的结果。

func NumberOf1n intint ans=0 for n0 ans++ n&=n-1 return ansGo代码class Solution public int NumberOf1int n int ans=0; whilen ans++; n&=n

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

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