【C】190 颠倒二进制位

2024-05-03 00:28
文章标签 二进制位 190 颠倒

本文主要是介绍【C】190 颠倒二进制位,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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

提示:

请注意,在某些语言(如 Java)中,没有无符号整数类型。在这种情况下,输入和输出都将被指定为有符号整数类型,并且不应影响您的实现,因为无论整数是有符号的还是无符号的,其内部的二进制表示形式都是相同的。

解法一

#include <stdint.h>uint32_t reverseBits(uint32_t n) {uint32_t res = 0;int i;for (i = 0; i < 32; i++) {res <<= 1;res |= n & 1;n >>= 1;}return res;
}

从给定的 32 位无符号整数 n 的最低位开始,逐位取出并存放到结果 res 的最高位,然后 n 向右移动一位,res 向左移动一位,直到 n 的所有位都取完

时间复杂度分析

原始算法中,我们需要遍历给定的 32 位无符号整数的所有位,进行逐位的颠倒操作。
由于只有固定的 32 位,因此遍历的时间复杂度为 O(32),即 O(1)。

空间复杂度分析

原始算法并没有使用额外的空间,只使用了几个整型变量来保存中间结果,因此空间复杂度为 O(1)。

解法二

#include <stdint.h>uint32_t reverseBits(uint32_t n) {n = (n >> 16) | (n << 16);n = ((n & 0xFF00FF00) >> 8) | ((n & 0x00FF00FF) << 8);n = ((n & 0xF0F0F0F0) >> 4) | ((n & 0x0F0F0F0F) << 4);n = ((n & 0xCCCCCCCC) >> 2) | ((n & 0x33333333) << 2);n = ((n & 0xAAAAAAAA) >> 1) | ((n & 0x55555555) << 1);return n;
}

通过位运算来同时颠倒相邻的位

时间复杂度分析

优化后的算法通过位运算来同时颠倒相邻的位,而不是逐位进行操作。
通过多次使用位移和按位与运算,将原始的 32 位整数颠倒。
优化后算法的时间复杂度取决于位运算的时间复杂度,位运算的时间复杂度通常为 O(1)。
空间复杂度分析

优化后算法仍然只使用了几个整型变量来保存中间结果,因此空间复杂度也为 O(1)。

这篇关于【C】190 颠倒二进制位的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/955457

相关文章

[LeetCode] 190. Reverse Bits

题:https://leetcode.com/problems/reverse-bits/ 题目大意 将32位的数,二进制翻转。 解题思路 解法和 将int a =123,翻转的思路 相同。 int b= 0;while(a>0){b = b*10 + a %10;a /=10;} 将新数整体左移一位,然后 取每个数的第i位置,将该位放到 新数的最低位。循环32次遍可以得到翻转。

数据赋能(190)——开发:数据产品——技术方法、主要工具

技术方法 数据产品涉及的技术方法非常广泛,包括但不限于: 数据采集与处理技术:如ETL(抽取、转换、加载)技术,用于从各种数据源中收集数据并进行预处理。数据存储与管理技术:如分布式存储、NoSQL数据库等,用于高效、安全地存储和管理数据。数据分析与挖掘技术:如机器学习、深度学习等算法和技术,用于从数据中提取有价值的信息和模式。数据可视化技术:如数据可视化库、图表绘制工具等,用于将数据以直观、易

【时时三省】c语言例题----华为机试题< 数字颠倒>

目录 1,题目 描述 输入描述: 输出描述: 示例1 2,代码

MySQL千万级数据从190秒优化到1秒全过程

文章目录 一、性能问题的分析1. 问题背景2. 查询分析 二、优化思路1. 添加索引2. 分区表3. 优化查询4. 查询缓存 三、具体优化步骤1. 添加复合索引2. 对表进行分区3. 启用查询缓存4. 优化查询 四、总结 🎉欢迎来到Java学习路线专栏~探索Java中的静态变量与实例变量 ☆* o(≧▽≦)o *☆嗨~我是IT·陈寒🍹✨博客主页:IT·陈寒的博客�

(函数)颠倒字符串顺序(C语言)

一、运行结果; 二、源代码; # define _CRT_SECURE_NO_WARNINGS# include <stdio.h># include <string.h>//声明颠倒函数;void reverse(char a[]){//初始化变量值;int i, j;char t;//循环颠倒;for (i = 0, j = strlen(a); i < (strlen(a)

[机缘参悟-190] - 《道家-水木然人间清醒1》读书笔记 -13- 关系界限 - IT人学会欣赏自己、与自己孤独相处,向内求

目录 前言: 1. 做人不求全,做事不求多 2. 一个人成熟的标志 3. 不必向别人解释自己 4. 孤独常伴,唯有内心强大 5. 下一轮文明的引领者 6. 外求与内求 7. 总有人能让我们欣赏 8. 凶狠和温柔 9. 陪伴自己 10. 珍惜拥有 11. 抽离感 12. 利 他 13. 利他与利己的统一:佛家的福报 14. 期 待:外求与内求 15. 内 核 前

hdu 4810 思维题+二进制位规律+异或规律 213南京现场赛题

http://acm.hdu.edu.cn/showproblem.php?pid=4810 以前做过一些涉及异或的题,化为二进制形式,然后统计0,1个数是一种很常见的处理方法,但是在做这个题的时候居然没尝试,脑残啊...... 一开始看5s时限,感觉稍微暴力一点应该可以,于是YY的O(n^3)算法但是没去实现,明显超时啊,大致就是通过C(n,1)的组合可以在O(n^2)内处理出C(n,2)的

**Leetcode 190. Reverse Bits

for 8 bit binary number abcdefgh, the process is as follow:   abcdefgh -> efghabcd -> ghefcdab -> hgfedcba 非常牛逼的写法。。 转自: https://leetcode.com/problems/reverse-bits/discuss/54741/O(1)-bit-operatio

【089】数字颠倒、字符串反转、句子逆序

♣题目部分    数字颠倒:输入一个整数,将这个整数以字符串的形式逆序输出,程序不考虑负数的情况,若数字含有0,则逆序形式也含有0,如输入为100,则输出为001?字符串反转:写出一个程序,接受一个字符串,然后输出该字符串反转后的字符串?    句子逆序:将一个英文语句以单词为单位逆序排放。例如“I am a boy”,逆序排放后为“boy a am I” 所有单词之间用一个空格隔开,语句中除了