问题描述:

颠倒给定的 32 位无符号整数的二进制位。

示例 1:

输入: 00000010100101000001111010011100
输出: 00111001011110000010100101000000
解释: 输入的二进制串 00000010100101000001111010011100 表示无符号整数 43261596,因此返回 964176192,其二进制表示形式为 00111001011110000010100101000000。

示例 2:

输入:11111111111111111111111111111101
输出:10111111111111111111111111111111
解释:输入的二进制串 11111111111111111111111111111101 表示无符号整数 4294967293,因此返回 3221225471 其二进制表示形式为 10111111111111111111111111111111 。

提示:

请注意,在某些语言(如 Java)中,没有无符号整数类型。在这种情况下,输入和输出都将被指定为有符号整数类型,并且不应影响您的实现,因为无论整数是有符号的还是无符号的,其内部的二进制表示形式都是相同的。
在 Java 中,编译器使用二进制补码记法来表示有符号整数。因此,在上面的 示例 2 中,输入表示有符号整数 -3,输出表示有符号整数 -1073741825。

解题思路:

1、对二进制数进行翻转,类似于整数翻转,需要先获得二进制数的末位。可以通过与运算实现(n & 1)。
&运算满足两个同为1,结果才为1,否则为0,这里和1作与运算,最后得到的结果与n的末位相同。

2、获取末位值后,需要获得倒数第二位数值,这里通过移位即可实现:n>>1,使倒数第二位移至末位。我们只需位移 32 次,就能获得 n 的所有二进制位值。

3.使用 res对各个二进制位进行保存。

实现代码

public class Solution {// you need treat n as an unsigned valuepublic int reverseBits(int n) {int res=0;      //用res保存n的各个二进制位for(int i=0;i<32;i++){//这里让res先左移的原因是因为从最后一个位开始,每个位左移32-i位,则第1位左移31次,所以res左移放在最前面res=res<<1;      //如果当前n的末位是1,那么res++,保证左移完后,res的该位也为1if((n & 1)==1){res++;}//n右移,得到n的倒数第i位n=n>>1;}return res;}
}

注意点:

Java中没有无符号数,只有有符号数,有符号数的移位是算术移位
算术移位的对象是有符号数,在移位过程中符号位保持不变。
对于正数,移位后出现的空位均以0填充。
对于负数,负数的原码数值部分与真值相同,移位时符号位不变,空位添0
负数的反码各位除符号位外与负数的原码正好相反,故移位后所添的代码应该与原码相反,全部添1
所以,Java中负数右移得到的结果仍然是负数。
这里如果颠倒二进制位从高位向低位填充时,可能会出现错误。
如题主一开始写的代码

leetcode190-颠倒二进制位相关推荐

  1. Leetcode--190. 颠倒二进制位

    颠倒给定的 32 位无符号整数的二进制位. 示例 1: 输入: 00000010100101000001111010011100 输出: 0011100101111000001010010100000 ...

  2. leetcode190颠倒二进制位(JAVA版)

    颠倒给定的 32 位无符号整数的二进制位. 循环32次,每次取出最后一位,放在新的数里,旧的树不断循环右移,新的数不断循环左移 public class Solution {// you need t ...

  3. 每日一题:leetcode190.颠倒二进制位

    题目描述 题目分析 题目本身很简单,没觉得有什么技巧可以再进行优化了,觉得位运算是无法打乱相对顺序的,而这里需要进行镜像颠倒的操作.因此就踏实地写了一个循环. 在使用位运算得到每一位的时候,我吸取了经 ...

  4. java二进制反转_Java实现 LeetCode 190 颠倒二进制位

    190. 颠倒二进制位 颠倒给定的 32 位无符号整数的二进制位. 示例 1: 输入: 00000010100101000001111010011100 输出: 0011100101111000001 ...

  5. 20190903:(leetcode习题)颠倒二进制位

    颠倒二进制位 题目 大致思路 代码实现 题目 大致思路 思路一:将该数与1,10,100- 等32个数做异或运算,判断对应二进制数每一位的数字是0还是1,然后将其存入数组res,最后乘以对应的幂次,即 ...

  6. 【Leetcode】[190] 颠倒二进制位

    [Leetcode][190] 颠倒二进制位 Author: Xin Pan Date: 2022.3.13 题目 原题链接 颠倒给定的 32 位无符号整数的二进制位. 解法 考虑使用位运算来做,因为 ...

  7. leetcode#190 颠倒二进制位

    leetcode#190 颠倒二进制位 题目: 颠倒给定的 32 位无符号整数的二进制位. 示例: 输入: 00000010100101000001111010011100 输出: 001110010 ...

  8. leetcode 190. 颠倒二进制位(位运算)

    颠倒给定的 32 位无符号整数的二进制位. 提示: 请注意,在某些语言(如 Java)中,没有无符号整数类型.在这种情况下,输入和输出都将被指定为有符号整数类型,并且不应影响您的实现,因为无论整数是有 ...

  9. leetcode 190. 颠倒二进制位

    颠倒给定的 32 位无符号整数的二进制位. 示例 1: 输入: 00000010100101000001111010011100 输出: 0011100101111000001010010100000 ...

  10. 【LeetCode】190. 颠倒二进制位 easy / bitset / stoul

    简单题现在目标25分钟吧:中等题一个小时吧. 重点:input: 无符号整型,output: 无符号整型. 颠倒:是指首位颠倒,而不是01颠倒 stoul(str, nullptr, 2) 第三个参数 ...

最新文章

  1. 堪称为经典游戏设计帖整理20个点击回复超高的精品贴
  2. robot framework环境搭建
  3. 最细的实现剖析:jQuery 2.0.3源码分析Deferred
  4. app网站换服务器,app切换服务器
  5. s2sh删掉原本的s2sh project capabilities后重新添加它们
  6. Makeflie自动生成依赖,自动化编译
  7. Python-print学习
  8. c++动态联编与静态联编
  9. 数字通信原理_推荐 | 从飞鸽传书到数字信号,你不得不懂的通信原理
  10. android汤姆猫的实验报告,毕业设计(论文)-基于Android的会说话的汤姆猫的设计与实现.doc...
  11. python是一种解释型、面向什么的计算机程序设计语言_python语言是一种什么类型...
  12. 30万人追更,年度重磅Go图书出版,百万流量博主带你学习Go底层原理
  13. 处理“Python使用sympy求解一元三次方程返回结果含I”的问题
  14. Spark常见面试题及解答
  15. USB学习入门(三)------众里寻他千百度(windows)
  16. T a(v);和T a = v;的区别
  17. C# asp.net 连接 Sql Server数据库 Timeout expired. 错误,怎么办?
  18. CSS3中的一些新特性(CSS)
  19. 从人力资源管理的角度看孙悟空大闹天宫
  20. 【SAP PO】X-DOC:SAP PO 接口配置 REST 服务对接填坑记

热门文章

  1. 亚马逊鼓励员工离职创办快递公司 并将提供最多1万美元资助
  2. 心痛!常德网约车司机遇害 滴滴回应:已成立应急处置小组
  3. 荣耀折叠屏手机发布日期曝光?将主打年轻用户
  4. SQLITE3 使用总结(1)【ZT】
  5. 程序员遇到bug时常见的30种反应
  6. php 打印多维数组中的值,从多维数组php中提取值
  7. stm32F051系列 单片机引脚定时器输出pwm波形控制风扇转速
  8. 2015计算机类专业课类试卷,2015计算机专业知识试题.doc
  9. html div 转图片或视频投放大屏
  10. php压缩中文乱码,完美解决PHP中文乱码