问题标签 [bit-manipulation]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
algorithm - 如何计算 32 位整数中设置的位数?
代表数字 7 的 8 位如下所示:
设置了三位。
确定 32 位整数中设置位数的算法是什么?
c++ - 我应该使用#define、枚举还是常量?
在我正在处理的 C++ 项目中,我有一个标志类型的值,它可以有四个值。这四个标志可以组合。标志描述数据库中的记录,可以是:
- 新纪录
- 删除记录
- 修改记录
- 现有记录
现在,对于我希望保留此属性的每条记录,我可以使用枚举:
但是,在代码的其他地方,我需要选择哪些记录对用户可见,所以我希望能够将其作为单个参数传递,例如:
所以,似乎我有三种可能的方法:
或者
或者
空间要求很重要(字节与整数),但并不重要。使用定义我失去了类型安全性,并且enum
我失去了一些空间(整数)并且当我想要进行按位运算时可能不得不强制转换。我const
认为我也失去了类型安全性,因为随机uint8
可能会错误地进入。
还有其他更清洁的方法吗?
如果没有,你会用什么,为什么?
PS 其余的代码是相当干净的没有#define
s 的现代 C++,而且我在少数空间中使用了命名空间和模板,所以这些也不是没有问题的。
c - 优化伽罗瓦域算术中的 y = x*x
我有这个 C 代码可以对 GF(8) 进行乘法运算:
这或多或少是教科书的实施。
我想知道如果我可以断言a 总是b,我是否对上述算法有一个聪明的优化,例如我做平方而不是乘法。顺便说一句,我不是在加密使用之后。我只想利用 GF(8) 中的 x*x 将 x 的位与零位一一交错的事实。
已经有非常聪明的方法来进行位交织,但是因为我发现 GF(8) 中的 x*x 做了位交织的事情(偶然)我不能停止尝试将它用于位交织优化。
有任何想法吗?
c - 如何检查我的字节标志,验证特定位是 1 还是 0?
我使用一个字节来存储一些标志,例如10101010
,我想知道如何验证特定位是否位于1
or 0
。
language-agnostic - 什么是按位移位(bit-shift)运算符,它们是如何工作的?
我一直在尝试在业余时间学习 C,其他语言(C#、Java 等)具有相同的概念(并且通常是相同的运算符)...
我想知道的是,在核心层面上,位移 ( <<
, >>
, >>>
) 有什么作用,它可以帮助解决什么问题,以及在拐弯处潜伏着什么陷阱?换句话说,绝对是初学者的移位指南。
c++ - 如何从一个 long long int 中提取四个 unsigned short int?
假设我有一个 long long int 并且想要取出它的位并从中构造四个 unsigned short int。
特定的顺序在这里并不重要。
我通常知道我需要移位并截断到 unsigned short int 的大小。但我想我可能会在某个地方犯一些奇怪的错误,所以我问。
bit-manipulation - Bit Twiddle 执行此转换
好奇是否有人对我将如何对二进制数执行以下操作有所了解:
转变
所以,
并澄清这不是一个简单的反转:
我在想正则表达式,但我正在使用二进制数并希望保持这种状态。bit twiddling hacks页面也没有给我任何见解。这显然具有元胞自动机的一些本质。那么,任何人都有一些可以解决这个问题的操作吗?(不需要代码,我知道该怎么做)。
sql - How to handle a lot of flags for a SQL record
I need advice on how to handle relatively large set of flags in my SQL2k8 table.
Two question, bear with me please :)
Let's say I have 20 flags I'd like to store for one record.
For example:
CanRead = 0x1 CanWrite = 0x2 CanModify = 0x4 ... and so on to the final flag 2^20
Now, if i set the following combination of one record: Permissions = CanRead | CanWrite
I can easily check whether that record has required permission by doing WHERE (Permissions & CanRead) = CanRead
That works.
But, I would also like to retrieve all records that can either write OR modify.
If I issue WHERE (Permissions & ( CanWrite | CanModify )) = (CanWrite | CanModify) i obviously won't get my record that has permissions set to CanRead | CanWrite
In other words, how can I find records that match ANY of the flags in my mask that i'm sending to the procedure?
Second question, how performant is in in SQL 2008? Would it actually be better to create 20 bit fields?
Thanks for your help
sql - 如何在 SQL Server 中稍微翻转一下?
我正在尝试在 SQL Server 中执行按位 NOT。我想做这样的事情:
注意:我开始写这篇文章并在完成之前找到了我自己问题的答案。我仍然想与社区分享,因为 MSDN 上缺少这段文档(直到我也将它添加到社区内容中)。