欢迎您访问365答案网,请分享给你的朋友!
生活常识 学习资料

力扣第190题“颠倒二进制位”的解题思路

时间:2023-05-30

参考代码:

public class Solution { public int reverseBits(int n) { int ret = 0; int count = 32; while (count-- > 0) { int lastBit = n & 1; ret = ret << 1 | lastBit; n = n >> 1; } return ret; }}

题目的意思是要将整个二进制数进行一个翻转,100->001,10111->11101。

需要用到位运算:

与&:有一个不是1,结果都是,0,0&0=0 0&1=0 1&0=0 1&1=1;

或|:有一个是1,结果都是1,0|0=0 0|1=1 1|0=1 1|1=1;

异或^:两个位只要不一样就是1,否则为0,0^0=0 0^1=1 1^0=1 1^1=0;

取反~:原来是1变为0,0变为1,~1=0 ~0=1;

左移<<:左边的二进制位丢弃,右边补0

右移>>:正数左补0,负数左补1,右边丢弃

无符号左移<<<:左边的二进制位丢弃,右边补0

无符号右移>>>:忽略符号位,空位都以0补齐

int lastBit = n & 1; 获取n最后一位;

ret = ret << 1 | lastBit; 将结果左移一位再添加n的最后一位

n = n >> 1; n右移减少一位

循环再次获取n的最后一位,再加到ret的结尾

不断重复,直至完全颠倒。

Copyright © 2016-2020 www.365daan.com All Rights Reserved. 365答案网 版权所有 备案号:

部分内容来自互联网,版权归原作者所有,如有冒犯请联系我们,我们将在三个工作时内妥善处理。