class Solution { public: int NumberOf1(int n) { int ans = 0; int mask = 1; while(mask != 0){ if(mask & n) ++ans; mask <<= 1; } return ans; } };
---这个方法很好的解决了负数在机器码里存储符号位为1的问题,将mask掩码从右向左移位。
(反之,如果是将数据n从左向右移位,会让最高位补0)
2024-01-29 11:01:04
class Solution { public: int NumberOf1(int n) { int ans = 0; int mask = 1; while(mask != 0){ if(mask & n) ++ans; mask <<= 1; } return ans; } };
---这个方法很好的解决了负数在机器码里存储符号位为1的问题,将mask掩码从右向左移位。
(反之,如果是将数据n从左向右移位,会让最高位补0)