首页
Python
Java
前端
数据库
Linux
Chatgpt专题
开发者工具箱
位操作专题
位操作(Bitwise Operation)
位操作(Bitwise Operation)是一种直接对整数的二进制位进行操作的计算方法。在计算机中,数据通常以二进制形式存储,位操作允许我们直接操作这些二进制位。位操作通常比常规的算术运算更高效,因为它们直接作用于二进制位而不涉及更复杂的计算。 常见的位操作符 1.按位与(&): 对应位都为1时,结果为1,否则为0。 例如:1010 & 1100 = 1000 2.按位或(|): 只要对应
阅读更多...
关于位结构体及位操作总结
#include <stdio.h>#pragma pack(1)struct stu{char a:4; // a占用char的低4位 char b:4; // b占用char的高4位(注意,这里实际上是与a共享同一个char的空间) };#pragma pack(4)int main(){struct stu s={.a=2, //a:0010.b=3, //b:00
阅读更多...
使用位操作高效解决单个元素出现问题【位运算】
使用位操作高效解决单个元素出现问题 在日常的算法面试和编程挑战中,常常会遇到寻找单个出现元素的问题。尽管可以用哈希表(map)轻松解决,但要求更高效的线性时间复杂度和常量空间复杂度时,位操作特别是异或(XOR)运算提供了一个巧妙的解决方案。本篇博客将深入探讨这个问题,详细解释异或运算的特性,并展示其在解决该类问题中的强大作用。 问题描述: 给定一个非空整数数组,除了某个元素只出现一次以外,其
阅读更多...
AWTK fscript 中的位操作扩展函数
fscript 是 AWTK 内置的脚本引擎,开发者可以在 UI XML 文件中直接嵌入 fscript 脚本,提高开发效率。本文介绍一下 fscript 中的 位操作扩展函数 位操作扩展函数 1. & 位与运算。 原型 n1 & n2 示例 print(1 & 1) 2. | 位或运算。 原型 n1 | n2 示例 print(|(1, 2))
阅读更多...
【Rust光年纪】深度剖析:Rust库探秘,从位操作到全文搜索
从位操作到全文搜索:探索Rust编程世界的精华库 前言 Rust作为一门现代化、安全性高的系统编程语言,拥有丰富多样的库和工具生态系统。本文将重点介绍几个在Rust语言中广受欢迎的库,它们分别用于处理位标志、位数组、布隆过滤器、Roaring Bitmaps、嵌入式数据库和全文搜索引擎功能。 欢迎订阅专栏:Rust光年纪 文章目录 从位操作到全文搜索:探索Rust编程世界的精
阅读更多...
位操作实现加减乘除四则运算
常见的位操作实现 1. 常用的一个等式:-n = ~(n - 1) = ~n + 1 2. 获取整数的二进制的最右边的1:n & (-n) 或 n & ~(n - 1)。例如 n = 010100, -n = 101100,那么n & (-n) = 000100 3. 去除整数的二进制的最右边的1:n & (n - 1)。例如 n = 010100,n-1 = 010011,n&(n-1)
阅读更多...
重温位操作
阅读更多...
【位操作笔记】计算整数的绝对值 3
计算整数的绝对值(integer absolute) 3 用于计算整数的绝对值,不使用分支判断。 算法说明 CPU表示有符号数的是使用补码(two’s complement),正数的补码与原码相同;负数的补码,符号位为1,其余位对原码取反加1。 如果CPU表示有符号数使用的是反码(one’s complement),则该算法无效。 因为是使用补码(two’s complement),所以
阅读更多...
【位操作笔记】计算整数的绝对值 2
计算整数的绝对值(integer absolute) 2 用于计算整数的绝对值,不使用分支判断。 算法说明 该算法利用CPU表示有符号数的是使用补码(two’s complement),正数的补码与原码相同;负数的补码,符号位为1,其余位对原码取反加1。 如果CPU表示有符号数使用的是反码(one’s complement),则该算法无效。 因为是使用补码(two’s complemen
阅读更多...
【位操作笔记】判断两个整数的符号位是否相反
判断两个整数的符号位是否相反 判断两个整数的符号位是否相反,也就是两个数是否一个是正数,一个是负数。 算法说明 该算法通过异或的结果大小来判断两个整数的符号位是否相反。 实现代码 bool Detect_opposite_signs(int x, int y){return ((x ^ y) < 0);} 算法计算过程 第一步,x ^ y,两个整数先进行异或。 第二步,判断异
阅读更多...
【位操作笔记】计算整数的绝对值 1
计算整数的绝对值(integer absolute) 1 用于计算整数的绝对值,不使用分支判断。 算法说明 该算法利用CPU表示有符号数的是使用补码(two’s complement),正数的补码与原码相同;负数的补码,符号位为1,其余位对原码取反加1。 如果CPU表示有符号数使用的是反码(one’s complement),则该算法无效。 有符号数右移,正数高位补0,负数高位补1,例如
阅读更多...
【位操作笔记】计算奇偶性 异或和右移查表法
计算奇偶性(Compute parity) 异或和右移查表法 计算奇偶性(Compute parity)指的是,计算一个数所包含1的个数是奇数还是偶数,例如一个8位数0x5b = 0b0101 1011,其中1的个数为5,是奇数;一个8位数0xa3 = 0b1010 0011,其中1的个数为4,是偶数。该算法可以用于奇偶校验位的计算与验证。 算法说明 先通过移位和位移,将32位数值
阅读更多...
【位操作笔记】计算奇偶性 使用乘法
计算奇偶性(Compute parity) 使用乘法 计算奇偶性(Compute parity)指的是,计算一个数所包含1的个数是奇数还是偶数,例如一个8位数0x5b = 0b0101 1011,其中1的个数为5,是奇数;一个8位数0xa3 = 0b1010 0011,其中1的个数为4,是偶数。该算法可以用于奇偶校验位的计算与验证。 算法说明 使用乘法运算,仅在8次运算中计算32位
阅读更多...
【位操作笔记】计算奇偶性 使用64位乘法和模除的方法
计算奇偶性(Compute parity) 使用64位乘法和模除的方法 计算奇偶性(Compute parity)指的是,计算一个数所包含1的个数是奇数还是偶数,例如一个8位数0x5b = 0b0101 1011,其中1的个数为5,是奇数;一个8位数0xa3 = 0b1010 0011,其中1的个数为4,是偶数。该算法可以用于奇偶校验位的计算与验证。 算法说明 使用64位乘法和模除
阅读更多...
【位操作笔记】计算奇偶性 查表法
计算奇偶性(Compute parity) 查表法 计算奇偶性(Compute parity)指的是,计算一个数所包含1的个数是奇数还是偶数,例如一个8位数0x5b = 0b0101 1011,其中1的个数为5,是奇数;一个8位数0xa3 = 0b1010 0011,其中1的个数为4,是偶数。该算法可以用于奇偶校验位的计算与验证。 算法说明 使用查表法判断一个数所包含1的个数是奇数
阅读更多...
【位操作笔记】位合并 通过掩码
位合并(Merge bits) 通过掩码 通过掩码把两个数进行位合并。例如一个数为0x23,另一个数为0x65,假设合并的数要取第一个数的高4位,第二个数的低4位,那么合并后的数就是0x25。 算法说明 该算法使用了异或来实现,比普通的实现方式节省一次操作。 实现代码 non_masked_val和masked_val是两个要进行合并的数,mask是掩码。 non_masked_val
阅读更多...
【位操作笔记】位合并 普通方式
位合并(Merge bits) 普通方式 通过掩码把两个数进行位合并。例如一个数为0x23,另一个数为0x65,假设合并的数要取第一个数的高4位,第二个数的低4位,那么合并后的数就是0x25。 算法说明 该算法通过先与掩码,再进行或操作完成。 实现代码 non_masked_val和masked_val是两个要进行合并的数,mask是掩码。 non_masked_val是合并非掩码位,
阅读更多...
位操作基础
一、位的概念 我们知道,在计算机中,一字节占8位(现在的某些电脑也有占16位的),这样表示的数的范围为0-255, 也即00000000-11111111。位就是里面的0和1。 char c=100; 实际上c应该是01100100,正好是64H。其中高位在前,低位在后。 | |
阅读更多...
C语言中位操作
一、基本位操作 <table border="0" cellspacing="0" cellpadding="2" width="402" unselectable="." "="" style="word-wrap: break-word; color: rgb(102, 102, 102); font-family: 宋体, Arial; font-size: 12px; line-heig
阅读更多...
位操作杂记
有六个位操作符,他们是: & 按位与 | 按位或 ^ 按位异 ~ 按位求反 >> 右移 ,这里需要注意的是数据整体的移动不是某一位的移动 << 左移 , 这里需要注意的是数据整体的移动不是某一位的移动 例如: 1<<3 就是二进制数00001左移3位成为:01000 3<<3 就是二进制数00011左移3位成为:11000 自己的错误认识是只能对单个位进行移位,这样我们在
阅读更多...
【进程等待】waitpid的参数pid | status的位图位操作WIFEXITEDWEXITSTATUS宏
目录 waitpid pid status status位图 status按位操作 输入型参数和输入型参数 宏WIFEXITED&WEXITSTATUS options&非阻塞等待 上篇进程等待我们介绍到怎样去进程等待。我们介绍了wait函数&阻塞等待。本篇我们将介绍waitpid函数的参数pid和status。 waitpid man 2 waitpid等待一个进
阅读更多...
Java逻辑与位操作
逻辑位与a&b 不短路 a&&b 短路 a&b或a|b 不短路 a||b 短路a|b异或a^ba^b非!a~a
阅读更多...
奶牛合作 对于位操作的敏感
有n( <= 50)头奶牛,每头奶牛都有一个编号(<1048576),把他们分成警察和小偷两队(不能有一队为空),如果两队的合作指数相同,那么就是合法的方案(合作指数是指该队成员的编号进行and操作的结果)(限时2000ms)。 首先比较敏感的就是编号不算大,是2的20次方,还有就是and操作的结果只和0的个数有关系,如果某位有一个0,那么结果必然是0。所以对每一位进行考虑(指的是将数字转成二进
阅读更多...
LeetCode题目89:格雷码 递归、迭代及位操作在数组合并中的应用
作者介绍:10年大厂数据\经营分析经验,现任大厂数据部门负责人。 会一些的技术:数据分析、算法、SQL、大数据相关、python 欢迎加入社区:码上找工作 作者专栏每日更新: LeetCode解锁1000题: 打怪升级之旅 python数据分析可视化:企业实战案例 python源码解读 程序员必备的数学知识与应用 备注说明:方便大家阅读,统一使用python,带必要注释,公众号 数据分析螺丝钉
阅读更多...
[LeetCode] 一些位操作类的算法
1. 出处 找列表中唯一出现一次的元素 汉明重量/数1出现的次数 汉明距离 2. 说明 2.1 基本规则 从二进制数开始分析有一些有趣的基本操作: 乘2: 右移动1位除2: 左移1位0 & 0 = 0, 1 & 0 = 0, 1 & 1 = 0,这个用来处理数1出现的位数,后边会写0 ^ 0 = 0, 1 ^ 0 = 1, 1 ^ 1 = 0 ,只要位不相同就为1,这里用来数唯
阅读更多...
STM32的位操作(相当于51单片机的sbit)
经过一段时间的学习,今天发现STM32的单个端口都有一个32位的地址,这样就可以把这个地址给找出来,进行单个位的操作了,这也没有什么好说的,直接复制粘贴就好了,用到的时候过来复制直接使用就行了。虽然看着挺多的起始最后就是得到一个地址而已: #define GPIOA_ODR_Addr (GPIOA_BASE + 0x0C) //想用哪个GPIO就改成ABCDEF,可以是ODR也
阅读更多...