Reverse Bits

原题链接Reverse Bits

给定一个32位无符号整型数,将它的二进制逆序,返回结果

从字符串的角度观察二进制逆序,只需要从两端开始两两交换即可。当然,完全可以不将二进制转为字符串,而是模拟字符串的逆序操作

代码如下

class Solution {
public:uint32_t reverseBits(uint32_t n) {uint32_t res = 0;uint32_t first = (1 << 31);uint32_t last = 1;int diff = 31;while(first > last){res |= ((first & n) >> diff);res |= ((last & n) << diff);diff -= 2;first >>= 1;last <<= 1;}return res;}
};

此外,利用std::bitset也可以解决本题

class Solution {
public:uint32_t reverseBits(uint32_t n) {auto s = std::bitset<32>(n).to_string();std::reverse(s.begin(), s.end());return std::bitset<32>(s).to_ulong();}
};

Number of 1 Bits

原题链接Number of 1 Bits

计算给定32位无符号整型数的二进制中1的个数,方法比较多

虽然本题明确指出n是无符号数,但是大多数问题中n都是可正可负

第一种方法,一位一位计算

class Solution {
public:int hammingWeight(uint32_t n) {int res = 0;/* 使用cnt作为循环次数的原因是n如果是负数,那么高位会全是1,导致无限循环 */int cnt = 32;while(cnt--){if(n & 1)++res;n >>= 1;}return res;}
};

如果n是负数,之所以会造成死循环是因为改变了n的值,导致右移时高位补1而不是补0

第二种方法,不移动n

class Solution {
public:int hammingWeight(uint32_t n) {int res = 0;uint32_t flag = (1 << 32);while(flag){if(n & flag)++res;flag >>= 1;}return res;}
};

第三种方法,不移动n

class Solution {
public:int hammingWeight(uint32_t n) {int res = 0;while(n){++res;n &= (n - 1);}return res;}
};

最后一种方法,利用std::bitset

class Solution {
public:int hammingWeight(uint32_t n) {return std::bitset<32>(n).count();}
};

每天一道LeetCode-----计算整型数二进制中1的个数/返回二进制翻转后的结果相关推荐

  1. 801. 二进制中1的个数 【二进制的基本模板】

    https://www.acwing.com/problem/content/803/ #include<cstdio> #include<iostream> using na ...

  2. 《剑指offer》c++版本 15.二进制中1的个数

    如题: 平常开发过程中,遇到求数的每位数字的时候,通常做法是将这个逐位右移,本题目计算整数的二进制中1的个数,通过右移的方式,能够解决部分问题,但是,这里有个坑,如果整数为负的话,右移后最左边还是1, ...

  3. 计算一个数的二进制中1的个数

    /**计算一个数的二进制中1的个数*/ #include int numberOf1InBinary(const unsigned int a); int numberOf1InBinary_Mask ...

  4. 《LeetCode力扣练习》剑指 Offer 15. 二进制中1的个数 Java

    <LeetCode力扣练习>剑指 Offer 15. 二进制中1的个数 Java 一.资源 题目: 编写一个函数,输入是一个无符号整数(以二进制串的形式),返回其二进制表达式中数字位数为 ...

  5. 基于visual Studio2013解决面试题之0410计算二进制中1的个数

     题目 解决代码及点评 /*求一个数中,二进制表示方式中1的个数范例算法采用分治思想,通过位操作计算二进制中1的个数 */#include <iostream> using name ...

  6. 【LeetCode】剑指 Offer 15. 二进制中1的个数

    [LeetCode]剑指 Offer 15. 二进制中1的个数 文章目录 [LeetCode]剑指 Offer 15. 二进制中1的个数 一.逐位判断 二.巧用 n&(n−1) 一.逐位判断 ...

  7. 求栈中元素个数算法_精妙的算法——计算二进制中1的个数

    如何计算二进制中1的个数? 全部遍历一遍? 不--不--这不是最优解-- 下面看一段代码: int bitcount (unsigned int n) {int count=0 ;while (n) ...

  8. 第2章 数字之魅——求二进制中1的个数

    求二进制中1的个数 问题描述 对于一个字节(8bit)的变量,求其二进制表示中"1"的个数,要求算法的执行效率尽可能地高. [解法一] 可以举一个八位的二进制例子来进行分析.对于二 ...

  9. C/C++求一个整数的二进制中1的个数

    求一个整数的二进制中1的个数 收藏 题目:输入一个整数,求该整数的二进制表达中有多少个1.例如输入10,由于其二进制表示为1010,有两个1,因此输出2. 分析:这是一道很基本的考查位运算的面试题.包 ...

最新文章

  1. 矩阵奇异值分解特征值分解_推荐系统中的奇异值分解与矩阵分解
  2. 百度地图- - - 鹰眼轨迹- - - -实时定位
  3. Linux学习进阶路线图
  4. python 如果你的年龄大于18_python基础
  5. yum安装k8s集群(单master两个node、阿里云镜像源)
  6. Redis在windows下安装过程
  7. The Python Challenge 闯关笔记
  8. RocketMQ原理解析-producer 2.如何发送消息
  9. origin如何绘制双y轴曲线_Origin系列:绘制双Y轴图
  10. Linux运维基础知识——开发人员可以掌握的常识
  11. 嵌入式C语言自我修养分享课件
  12. 各国区号json整理
  13. 做引流的方法:真实案例短视频如何涨粉的秘密
  14. 网页上腾讯视频下载mp4格式到本地
  15. 汉芯门主角制造另外一个汉芯?
  16. 正则表达式与遇到的问题
  17. 1.3-聊天机器人的模块和框架
  18. RHEL5.5下载地址及安装序列号
  19. 微信小程序直播卖货模式怎么开启
  20. Pintos project2 实验报告

热门文章

  1. oracle带输出参数存储,oracle带输入输出参数存储过程(包括sql分页功能)
  2. Java黑皮书课后题第10章:10.3(MyInteger类)设计一个名为MyInteger的类
  3. html 编辑xml,编辑XML\HTML时取消浏览“amp”
  4. springboot中端点监管 endpoint actuator
  5. 深入浅出CSS(二):关于雪碧图、background-position与steps函数的三角恋情
  6. js判断是安卓手机还是ios
  7. dedecms 文章回收站 记得及时清理
  8. 编写高性能Web应用程序的10个技巧
  9. 【数据结构与算法】之深入解析“串联所有单词的子串”的求解思路与算法示例
  10. 【数据结构与算法】之深入解析“三数之和”的求解思路与算法示例