C++中的位运算

C++教程之位运算 这篇文章主要讲述来C++中的位运算,更多文章可以关注公众号QStack。 阅读详情

基本知识

  最近博主在刷Leedcode题,很多人都是采用位运算来解题的,看的我满脸雾水,所以上网收集了一下c++中关于位运算的知识,为此总结一下,有不妥的地方还望指正。

  程序中的所有数在计算机内存中都是以二进制的形式储存的。位运算说穿了,就是直接对整数在内存中的二进制位进行操作。比如,and运算本来是一个逻辑运算符,但整数与整数之间也可以进行and运算。举个例子,6的二进制是110,11的二进制是1011,那么6 and 11的结果就是2,它是二进制对应位进行逻辑运算的结果(0表示False,1表示True,空位都当0处理)。[百度百科]

下面的a和b都是整数类型,则:
这里写图片描述

位运算分析

1. 与运算&
双目运算。二个位置位等于1时,结果等于1,其它的结果都等于0。

a b result
0 0 0
0 1 0
1 0 0
1 1 1

(1)例子说明
11&3 = 3

   00001011
&  00000011   
=  00000011 = 3

(2)与运算用途
i. 我们判断一个数是否被2整除,一般都写成 if(n % 2 == 0)现在可以换成 if((n&1) == 0)
换句话说,这可以用来判断一个整数的奇偶,二进制的最末位为0表示该数是偶数,最末位为1表示该数为奇数。

ii与运算的一个用途是检查指定位是否置位(等于1)。例如一个BYTE里有标识位,要检查第4位是否置位,代码如下:

 BYTE   b   =   50;  
 if   (   b   &   0x10   )  
         cout   <<   "Bit   four   is   set"   <<   endl;  
 else  
         cout   <<   "Bit   four   is   clear"   <<   endl;  

上述代码可表示为:

     00110010     -   b  
  &  00010000     -   &   0x10  
----------------------------  
      00010000     -   result  

可以看到第4位是置位了。

2.或运算 |
双目运算。二个位只要有一个位置位为1,结果就等于1。二个位都为0时,结果为0。

a
位运算的原理及应用(C++ 摘要:位运算计算机领域中常用的一种操作方式,它直接对二进制数据进行操作,具有高效、灵活等优点。本文将介绍位运算的基本原理和常见的应用场景,以及在C++语言中如何使用位运算操作。通过学习位运算的相关知识,我们能够更好地理解计算机底层的运算机制,并且能够在实际的程序开发中灵活运用位运算,提高代码执行效率。 阅读详情

相关推荐

C、C++中的位运算

文章目录1 C、C++中的位运算符1.1 C、C++中的位运算符1.2 C、C++中的位运算符的优先级1.3 位运算与逻辑运算2 左右和右移运算符2.1 左移和右移注意点 1 C、C++中的位运算符 1.1 C、C++中的位运算符 C、C++中的位运算符直接对bit位进行操作,其效率最高。 1.2 C、C++中的位运算符的优先级 四则运算 > 位运算 > 逻辑运算。 1.3 位运算与...

木子皿--啥都不会的菜鸟 1243

c++位运算(详解,初学者绝对能看懂)

目录 一 位运算符号 移位运算: 二 常用技巧: 三 运算符号优先级: 四 位运算常用技巧 1 判断奇偶性 2 求a的b次方 3 找处未重复的数 4用O(1)时间检测整数n是否是2的幂次. 5计算在一个 32 位的整数的二进制表示中有多少个 1 6二进制状态压缩 7二进制优化递归 8 一道经典题 一 位运算符号 & 按位与 如果两个相应的二进制位都为1,则该位的结果值为1,否则为0 | 按位或 两个相应的二进制位中只要有一个为1...

m0_64183293的博客 2万+

从BUUCTF实战看CPP逆向中的位运算陷阱:以GXYCTF2019赛题为例

本文以GXYCTF2019赛题为例,深入分析CPP逆向工程中位运算混淆的常见模式与破解策略。文章详细讲解了多层嵌套、常量参与等五种典型位运算混淆模式,并提供了静态分析与动态调试的协同策略、位运算表达式化简技巧以及Z3约束求解器的实战应用。通过系统化的解题流程,帮助逆向工程师有效应对CPP逆向中的位运算陷阱。

weixin_42697475的博客 277

C++算法 —— 位运算

本篇章总结了关于位运算的相关经典算法,其中有几道面试常见题,虽然简单,但思路巧妙

学习C++的小陈同学 4377

C++中的位运算

`>>` | 右移 | 右移指定位数,左侧补符号位(有符号数)或0(无符号数) | `a >> 2` || `\|` | 按位或 | 任意一位为1时结果为1 | `a \| b` || `~` | 按位取反 | 所有位翻转(0变1,1变0) | `~a` || `&` | 按位与 | 只有两个位都为1时结果为1 | `a & b` |// 二进制11111000(假设8位)

2301_80355452的博客 607

c++中的位运算

位运算位运算在c语言和c++中都有。 主要有与,或,异或,移位等运算。 基本规则: 与: 都为1结果为1. 0&1=0; 1&1=1; 0&0=0; 1&0=1 或: 只要其中一个为1,结果就是1 0|1 = 1;0|1=0;1|1=1; 0|0=0 异或: 不同则为1,相同则为0 0 ^ 1 = 1;0 ^ 1=0;1 ^ 1=0; 0 ^ 0=0 移位:...

weixin_37541676的博客 555

C++中的位运算总结

C++中的位运算总结 1)位运算 位运算是指对转换成二进制的数字进行每一位上的0、1的运算,运算涉及到五种运算:与(&),或(|),异或(^),左移(<<),右移(>>)。 如下表所示: 与(&) 0 &...

dichuangheng8094的博客 269

关于C++以及JAVA中的位运算

位运算操作符 对应的位运算 用法 功能描述 ~ 按位非 ~expr 翻转expr的每一个位:1变0,0变1 左移 expr 将expr向左移动n位,移到外面的被丢弃,右边的位补0,因此左移n位相当于乘以2n >>  右移 expr>>

GROWTH 1429

位运算在算法竞赛中的应用(基于C++语言)_位运算优化

C++算法竞赛中,位运算优化是提升效率的关键技巧。文章介绍了6种常见位运算:与(&)检查位状态、或(|)设置位、异或(^)翻转位、非(~)反转所有位、左移(<<)乘2幂、右移(>>)除2幂。并列举了5个应用实例:生成子集、动态规划状态压缩、快速幂运算、哈希函数计算和位计数。这些方法能显著优化算法的时间和空间复杂度,是竞赛中的重要技巧。

YLCHUP的博客 528

C++中的位运算

类可以用于更高级别的位操作,比如按位逻辑运算、获取和设置单个位等。C++标准库并没有内置大量的位运算函数,但某些编译器提供了。

u014114223的博客 1519

C++中的位运算与逻辑运算

位运算:操作对象是整数类型的二进制位,用于对二进制位进行逐位操作。逻辑运算:操作对象主要是布尔类型,用于进行逻辑判断,具有短路特性。// 结果为truestd::cout << "逻辑或结果: " << std::boolalpha << result << std::endl;return 0;3. 逻辑非(!逻辑非运算符是单目运算符,它会对操作数的逻辑值进行取反操作,即true变为false,false变为true。a;// 结果为false。

weixin_42366947的博客 1069

使用 C++ 中的 Bitsets 容器类型来优化位运算

上面的代码中,我们首先创建了一个长度为 10 的 bitsets 容器对象,然后向容器中添加了一些值,并输出整个 bitsets 容器类型的内容。例如,在需要进行二进制计数的情况下,使用 bitsets 可以极大地提高代码的可读性和效率。在实际编程过程中, bitsets 容器类型可以帮助我们更加高效地处理位级别的数据,从而提高代码的可读性和效率。Bitsets 的基本用法非常简单,首先需要 include bitset 头文件,然后通过定义 bitset 对象来创建一个 bitsets 容器类型的实例。

HackVibe的博客 262

C++中的位运算符和八叉树(Octree)中的应用

位运算C++ 中是高效的,它不仅用于快速操作整数的二进制位,还能帮助我们解决诸如八叉树构建、图像处理、碰撞检测等领域中的性能瓶颈。在八叉树构建中,利用位运算来决定子节点,可以高效地管理三维空间的分割和节点访问。

qq_36812406的博客 813

【优选算法篇】微位至简,数之恢宏——解构 C++ 位运算中的理与美

位运算,以其简洁高效的特质,成为算法世界中无可替代的利器。在 C++ 中,位运算不仅是运算符的组合,更是一门精妙的艺术——从最基础的判断字符唯一性到加法的无进位计算,再到更复杂的位图操作,每一个操作背后都是对计算资源的极致优化,是对数据微观层面的精准把控。本篇文章带你从位的微观视角出发,逐步揭示数的宏观全貌,感受 C++ 位运算在算法中的精巧与神韵。

半截诗的博客~ 4103

C/C++语言中的位运算

数据在计算机中都是二进制存储的,都可进行按位运算,至于使用的何种编码规则,运算后的结果就不同了。在微机中存储数据有定点表示法和浮点表示法两种。定点表示法是将小数点固定在某一位置,通常有纯小数和纯整数两种方法。我们平时处理的整数就是纯整数这种表示,比于int,char,long类型等。浮点表示法主要用来表示实数,在C/C++中用来表示float和double型。本文主要针对纯整数的位运算,对于计算机

小shan在努力~ 950
上一篇: 88. Merge Sorted Array
下一篇: android项目目录基本分析
HachiLin
博客等级 码龄10年 189粉丝 113原创
评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值