记录C++学习,位运算的笔记

引言

博主不是计算机专业的,码代码也只是项目里面会用到才去单独学一点。我以前些python的。最近学习点云操作的时候需要用到C++,于是就把多年没用的C++捡起来重新复习了一下。对于位运算,以前从来没用到过这个东西,都快忘光了,今天捡起来写一些笔记加深一下印象。

位运算作用

先简单说一下位运算的作用,这个东西以前我学习的时候完全不知道这玩意儿有什么用,现在发现这个运算能提高算法的速度。

简单举个例子,不想看的可以跳过这一段,我只是因为正好项目里用到才记录一下。

一种常见的点云算法是体素格网法(Voxel Grid),它用于将不规则采样的点云数据转换为规则矩阵网格。在体素格网法中,可以将点云空间分割为固定大小的立方体体素。对于每个体素,可以计算它所包含的点云的质心和协方差矩阵。这些计算通常需要对点云中的每个点进行迭代,并对所有点进行组合计算,这在处理大量点云数据时会非常缓慢。

此时,可以使用位运算来快速计算体素内的点云。具体地说,可以使用两个位图分别表示体素内的点云和体素网格,其中体素内的点云位图将每个点映射到一个位,而体素网格位图将每个体素映射到一个位。然后,可以使用按位与运算符来找到哪些位既在体素内的点云位图中,也在体素网格位图中设置了。这些位对应于位于该体素内的点,可以用于计算该体素的质心和协方差矩阵,而无需迭代整个点云数据集。(可能位运算还有其他的作用,网上查了一下还有创建掩码什么的,跟我的领域没关系,我暂时就只知道这些)

位运算符的描述

就是以下这几位

(&,|,~,^,<<,>>)

按位与&

&:官方名按位与, 按位与是一种逐位比较两个二进制数的操作,只有两个二进制数对应位都为1时,结果才为1,否则结果为0。

举个例子:

a = 10101111, b = 11011010,c = a & b

那么c 就是10001010,也就是将 a 和 b 分别表示为二进制数后,逐位比较后得到的结果。

按位或|

|:官方名按位或,按位或是一种逐位比较两个二进制数的操作,只要两个二进制数中对应位有任意一位为1时,结果就为1,否则结果为0。

a = 10101111, b = 11011010,c = a | b

那么c就是11111111,也就是将 a 和 b 分别表示为二进制数后,逐位比较后得到的结果。

按位取反~

~:用于执行按位取反操作,0取反就是1,1取反就是0

a = 00111001, b = ~a

那么b就是11000110,就是a对应位是1,那么~操作就是取反变成0,同样的,a对应位是0,那么b对应位就是1。

按位异或^

^: 只有a,b两个二进制数对应位上的数不同时,结果才为1,相同时结果为0.

a = 00111001, b = 01010110, c = a ^ b

对比一下a和b每个位上的数,c为01101111。

<<向左移动n位

用法 

a = 00111001,b = a << 2   

a所有位置上的数左移两位,结果 b 的二进制值为 11100100

>>向右移动n位

用法

a = 00111001 ,b = a >> 2

a的所有位置上的数右移两位,结果b 的二进制值为 00001110

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值