zoukankan      html  css  js  c++  java
  • 剑指offer11:输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。(进制转换,补码反码)

    1. 题目描述

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

    2. 思路和方法

      使用移位(<<)和 “| & !”操作来实现。1的二进制是:前面都是0,最后一位为1。每次向左移位一下,使得flag的二进制表示中始终只有一个位为1,每次与n做位与操作,这样就相当于逐个检测n的每一位是否是1。unsigned int flag = 1;  例如:5&1 = 101 & 001,1前面补0

    3. C++核心代码

    3.1 位运算

     1 class Solution {
     2 public:
     3      int  NumberOf1(int n) {
     4          int result = 0;
     5          unsigned int flag = 1;
     6          while(flag)
     7          {
     8              if(n&flag)
     9                  result++;
    10              flag = flag<<1;
    11          }
    12          return result;
    13      }
    14 };
    View Code

    参考资料

    https://blog.csdn.net/qq_28632639/article/details/87966115

  • 相关阅读:
    bzoj3272 Zgg吃东西
    bzoj3894 文理分科
    poj1149 PIGS
    poj1637 Sightseeing tour
    [Wc2007]剪刀石头布
    poj2396 Budget
    [NOI2017]游戏
    CF666E Forensic Examination
    bzoj4889 [Tjoi2017]不勤劳的图书管理员
    CF587F Duff is Mad
  • 原文地址:https://www.cnblogs.com/wxwhnu/p/11407508.html
Copyright © 2011-2022 走看看