1
192
这些只是我提出的前几个例子——这并不是一个详尽的清单。 |
2
41
奇怪吗?
它能被二整除吗(偶数)?
|
3
23
低级编程就是一个很好的例子。例如,您可能需要将一个特定的位写入内存映射寄存器,以使某个硬件按您希望的方式工作:
也,
|
4
22
下面是一些处理作为单个位存储的标志的常见习惯用法。
设置收费标志:
清除CallerID缺少标志:
测试是否设置了CallerID Missing和Charged:
|
5
20
例如,我使用它们从打包的颜色值中获取RGB(A)值。 |
6
18
我已经使用位操作来实现CMS的安全模型。它有页面,如果用户在适当的组中,他们可以访问这些页面。一个用户可能在多个组中,因此我们需要检查用户组和页面组之间是否存在交叉点。因此,我们为每个组分配了一个唯一的2次幂标识符,例如:
我们或者将这些值放在一起,并将值(作为单个int)存储在页面中。例如,如果A&B组可以访问页面,我们将值3(二进制为00000011)存储为页面访问控制。以同样的方式,我们用一个用户来存储ORD组标识符的值,以表示它们所在的组。 因此,要检查给定用户是否可以访问给定的页面,只需将这些值和在一起,并检查这些值是否为非零。这是非常快的,因为这个检查是在一条指令中实现的,没有循环,没有数据库往返。 |
7
15
当我有一堆布尔标记时,我喜欢将它们全部存储在一个int中。 我用位和把它们取出来。例如:
等。 |
8
10
加密是所有按位操作。 |
9
10
&=和:
转换:
=或
^ =异或
~=不
可以看出 全部的 这些操作可以实现可能的本地位操作。 因此,如果您愿意,可以只通过位操作实现一条加法指令。 一些很棒的黑客:
http://www.ugcs.caltech.edu/~wnoise/base2.html
|
10
8
我刚用了位异或(
|
11
8
您可以使用它们作为一种快速而肮脏的散列数据的方法。
|
12
6
按位&用于屏蔽/提取字节的某一部分。 1字节变量
特别是轮班操作员(<<>)通常用于计算。 |
13
5
这是一个以字节格式从位图图像中读取颜色的示例。
我希望这个小小的例子有帮助… |
14
5
在当今现代语言的抽象世界里,不算太多。文件IO是一个容易想到的问题,尽管它正在对已经实现的东西执行位操作,而不是实现使用位操作的东西。不过,作为一个简单的示例,此代码演示如何在C中删除文件的只读属性(以便它可以与指定filemode.create的新文件流一起使用):
对于自定义实现,下面是一个最近的示例: 我创建了一个“消息中心”,用于将安全消息从分布式应用程序的一个安装发送到另一个安装。基本上,它类似于电子邮件,包括收件箱、发件箱、已发送等,但它也保证了已读回执的送达,因此除了“收件箱”和“已发送”之外还有其他子文件夹。这意味着我需要大致定义“收件箱”中的“内容”或“已发送文件夹”中的“内容”。在“已发送”文件夹中,我需要知道哪些内容已读,哪些内容未读。对于未读的内容,我需要知道哪些内容已接收,哪些内容未接收。我使用这些信息构建一个动态的WHERE子句,它过滤本地数据源并显示适当的信息。 以下是枚举的组合方式:
你看到了吗?通过使用“inbox”枚举值inboundmemos(&)进行anding,我知道inboundmemosformyorders在收件箱中。 下面是方法的一个简化版本,它构建并返回为当前选定文件夹定义视图的筛选器:
非常简单,但在抽象层次上的整洁实现通常不需要按位操作。 |
15
4
base64编码就是一个例子。base64编码用于将二进制数据表示为可打印字符,以便通过电子邮件系统(以及其他用途)发送。base64编码将一系列8位字节转换为6位字符查找索引。位操作、移位和“ing”或“ing,not”对于实现base64编码和解码所需的位操作非常有用。 当然,这只是无数例子中的一个。 |
16
4
我很惊讶没有人为互联网时代选择了显而易见的答案。正在计算子网的有效网络地址。 |
17
3
似乎没有人提到定点数学。 (是的,我老了,好吗?) |
18
3
位运算符对于循环长度为2次方的数组很有用。正如许多人所提到的,按位运算符非常有用,并且在 旗帜 , 绘图 , 网络 , 加密 . 不仅如此,而且速度非常快。我个人最喜欢的用途是 环 一个 数组 没有 条件句 . 假设你有一个 基于零索引 数组(例如,第一个元素的索引是0),您需要无限循环它。无限期地,我的意思是从第一个元素到最后一个元素再回到第一个元素。实现这一点的一种方法是:
这是最简单的方法,如果你想避免 如果 语句,可以使用 模数 这样的方法:
这两种方法的缺点是模运算符很昂贵,因为它在整数除法之后查找余数。第一个方法运行一个
如果
每次迭代的语句。但是,如果数组的长度是2的幂,那么使用按位运算符可以轻松生成类似
这就是它的工作原理。在
二元的
格式每一个2的幂减去1的数字只能用1来表示。例如,二进制中的3是
如果
结果将是0.001,它是十进制的1,并且在数组中寻址第二个元素。 |
19
3
通常,位运算比乘法/除法快。所以,如果你需要用变量x乘以9,你会做到的。
类似地,如果您希望将数组用作循环队列,那么使用位操作处理环绕检查会更快(也更优雅)。(数组大小应为2的幂)。你可以用
另外,如果您希望一个错误标志将多个错误代码放在一起,则每个位可以保存一个单独的值。您可以将它与每个单独的错误代码作为检查。这在Unix错误代码中使用。 另外,一个n位位图可以是一个非常酷和紧凑的数据结构。如果要分配大小为n的资源池,可以使用n位来表示当前状态。 |
20
2
我将它们用于多选选项,这样我只存储一个值而不是10个或更多 |
21
2
它在SQL关系模型中也很方便,假设您有以下表:blogentry、blogcategory 传统上,您可以使用BlogentryCategory表在它们之间创建N-N关系。 或者,当没有太多BlogCategory记录时,可以使用BlogEntry中的一个值链接到多个BlogCategory记录,就像处理标记的枚举一样, 在大多数RDBMS中,在“标记”列上也有一个非常快速的运算符来选择… |
22
2
是一个数字
整数的最高位
哪个最低
|
23
2
当您只想更改微控制器输出的一些位,但要写入的寄存器是一个字节时,您可以这样做(伪代码):
当然,许多微控制器允许你单独改变每一位… |
24
2
如果你想计算你的数字模(%)的某个2次方,你可以使用
这可能只是一个有用的替代模量运算非常大的股息是2^n…但即使这样,在我在.NET 2.0上的测试中,它在模数运算上的速度提升也可以忽略不计。我怀疑现代编译器已经执行了这样的优化。有人知道更多吗? |
25
1
我见过他们在基于角色的访问控制系统中使用。 |
26
1
在我的问题中有一个现实世界的用法-
在使用WindowsC API位30中的wm_keydown消息时,指定以前的密钥状态。如果在发送消息之前键是向下的,则值为1;如果键是向上的,则值为零。 Respond to only the first WM_KEYDOWN notification?
在使用WindowsC API位30中的wm_keydown消息时,指定以前的密钥状态。如果在发送消息之前键是向下的,则值为1;如果键是向上的,则值为零。 |
27
1
它们主要用于按位运算(惊喜)。下面是一些在PHP代码库中找到的实际示例。 字符编码:
数据结构:
数据库驱动程序:
编译器实现:
|
28
1
每当我第一次启动C编程时,我都理解了真值表和所有这些,但直到我阅读本文,它才真正地使用它。 http://www.gamedev.net/reference/articles/article1563.asp (给出了现实生活的例子) |
29
1
我不认为这算是按位的,但是Ruby的数组通过普通的整数按位运算符定义了set操作。所以
|
30
1
河内塔线性解采用逐位运算来解决这个问题。
可以找到此解决方案的解释 here |
John V · 是否存在单元测试无法发现的逻辑/流错误类型? 6 年前 |
Beefster · 为什么ANSI颜色转义以“m”而不是“]”结尾? 6 年前 |
Guillermo Gutiérrez · STR转换是如何工作的? 6 年前 |
RudziankoÅ · 合并排序数组算法 6 年前 |
user8852560 · 构造函数中的验证和构造函数冲突 6 年前 |
jav974 · 订购产品时寻找最佳价格组合的算法 7 年前 |
hippietrail · 确定浮点数中前导零的数量 7 年前 |