How can I check if a bit value is equal to 1?(如何检查位值是否等于1?)
本文介绍了如何检查位值是否等于1?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有一个正在运行的OpenCL内核。如何检查变量中选定位置的位是否等于1?
例如,我发现在C#中可以使用代码like this将uint
转换为包含位的字符串:
// Here we will store our bit
string bit;
// Unsigned integer that will be converted
uint hex = 0xfffffffe;
// Perform conversion and store our string containing bits
string str = uint2bits(hex);
// Print all bits "11111111111111111111111111111110"
Console.WriteLine(str);
// Now get latest bit from string
bit = str.Substring(31, 1);
// And print it to console
Console.WriteLine(bit);
// This function converts uint to string containing bits
public static string uint2bits(uint x) {
char[] bits = new char[64];
int i = 0;
while (x != 0) {
bits[i++] = (x & 1) == 1 ? '1' : '0';
x >>= 1;
}
Array.Reverse(bits, 0, i);
return new string(bits);
}
如何像上面的代码一样制作内核内部?
__kernel void hello(global read_only uint* param) {
/*
Do something with "param"
...
*/
int bit;
int index = 31;
/*
Store bit value ("0" or "1") at variable "bit"
...
*/
if (bit == 1) {
// ...
} else {
// ...
}
// Or maybe something more easy to check a bit value at "index" in "param" ... ?
}
在哪里可以了解更多有关这方面的信息?
推荐答案
您可以通过使用1<<b
进行掩码,并将结果与零进行比较来检查数字中的位b
设置为1还是设置为0:
static bool isBitSet(uint n, uint b) {
return (n & (1U << b)) != 0;
}
1 << b
的二进制数值由第b
位置中的单个1
组成,从后面开始从零开始计数,其他所有位置均为零。当您使用按位AND运算符&
将此掩码应用于n
时,您会得到一个数字n
位,所有其他位置均为零。因此,当n
的b
位设置为零时,整个操作的结果为零,否则为非零值。
这篇关于如何检查位值是否等于1?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
沃梦达教程
本文标题为:如何检查位值是否等于1?


猜你喜欢
- 输入按键事件处理程序 2022-01-01
- C# 中多线程网络服务器的模式 2022-01-01
- 带有服务/守护程序应用程序的 Microsoft Graph CSharp SDK 和 OneDrive for Business - 配额方面返回 null 2022-01-01
- MoreLinq maxBy vs LINQ max + where 2022-01-01
- C#MongoDB使用Builders查找派生对象 2022-09-04
- 良好实践:如何重用 .csproj 和 .sln 文件来为 CI 创建 2022-01-01
- WebMatrix WebSecurity PasswordSalt 2022-01-01
- 如何用自己压缩一个 IEnumerable 2022-01-01
- 在哪里可以找到使用中的C#/XML文档注释的好例子? 2022-01-01
- Web Api 中的 Swagger .netcore 3.1,使用 swagger UI 设置日期时间格式 2022-01-01