回答
听起来有点像功课,但:
bool IsBitSet(byte b, int pos)
{
return (b & (1 << pos)) != 0;
}
POS 0是最显著位,POS 7是最多的。
又一个班轮我总是谷歌,而不是仅仅学习它:) – grapkulec 2010-10-14 09:04:55
这是用文字解决的。
左移位的整数与初始值1 n倍,然后做一个并与原来的字节。如果结果不为零,则该位置1否则不是。 :)
像
return ((0x1 << nPos) & b) != 0
这也适用(.NET 4的测试):
void Main()
{
//0x05 = 101b
Console.WriteLine(IsBitSet(0x05, 0)); //True
Console.WriteLine(IsBitSet(0x05, 1)); //False
Console.WriteLine(IsBitSet(0x05, 2)); //True
}
bool IsBitSet(byte b, byte nPos){
return new BitArray(new[]{b})[nPos];
}
如果你摆弄一点,你的表现后很可能。这样做可能会感觉更多的OO,但它会杀死perf。 – 2012-10-31 00:29:39
我不会低估你或任何东西,但如果你正在寻找表现,那么你不应该这样做。 – Gaspa79 2016-11-03 18:13:52
要检查位在一个16位的字:
Int16 WordVal = 16;
for (int i = 0; i < 15; i++)
{
bitVal = (short) ((WordVal >> i) & 0x1);
sL = String.Format("Bit #{0:d} = {1:d}", i, bitVal);
Console.WriteLine(sL);
}
x == (x | Math.Pow(2, y));
int x = 5;
x == (x | Math.Pow(2, 0) //Bit 0 is ON;
x == (x | Math.Pow(2, 1) //Bit 1 is OFF;
x == (x | Math.Pow(2, 2) //Bit 2 is ON;
对于解释您的解决方案,通常是一个很好的做法,更多的是为什么而不是如何。 – ForceMagic 2012-10-11 03:41:49
OMG,让我们抛开问题编译器是否会precalc所有Math.Pow你,但为什么不这样做的((X Math.Pow)!= 0),而不是?它更清晰,可以节省几纳秒。 – Konstantin 2017-04-30 01:43:17
基于Mario Fernandez's answer,我想为什么不把它在我的工具箱不局限于数据类型方便的扩展方法,所以我希望这是确定在这里分享:
/// <summary>
/// Returns whether the bit at the specified position is set.
/// </summary>
/// <typeparam name="T">Any integer type.</typeparam>
/// <param name="t">The value to check.</param>
/// <param name="pos">
/// The position of the bit to check, 0 refers to the least significant bit.
/// </param>
/// <returns>true if the specified bit is on, otherwise false.</returns>
public static bool IsBitSet<T>(this T t, int pos) where T : struct, IConvertible
{
var value = t.ToInt64(CultureInfo.CurrentCulture);
return (value & (1 << pos)) != 0;
}
相当于马里奥·F编码,但移动字节而不是掩码:
bool IsBitSet(byte b, int pos)
{
return ((b >> pos) & 1) != 0;
}
- 1. 检查cookie是否设置
- 2. 检查是否有cookie设置,如果不是输出脚本
- 3. MongoEngine - 查询 - 如何检查ListField是否为空或未设置
- 4. 检查是否有类,并检查是否被点击
- 5. 如何检查LogWriter是否已设置?
- 6. 如何检查是否datatable.PrimaryKey设置
- 7. cakephp - 检查会话是否设置
- 8. HTACCESS检查是否设置语言
- 9. 如何检查WaitHandle是否已设置?
- 10. PHP检查用户名是否设置
- 11. 检查变量是否设置
- 12. 检查JSP片段是否已设置
- 13. 检查函数参数是否设置
- 14. 检查变量是否设置为NO_VALUE
- 15. Liquibase:检查是否设置了属性
- 16. 检查数组是否为空或未在PHP中设置?
- 17. Python Django检查属性是否存在或已设置
- 18. 检查Cookie是否为空或在php中设置无效?
- 19. 检查随机框内是否有点
- 20. 检查SWF是否有焦点
- 21. 检查DOM元素是否有焦点
- 22. 检查数字是否有小数点
- 23. 检查对象是否有焦点
- 24. 如何检查vtk polydata是否有单元格或点数据
- 25. 检查文件是否为空或不
- 26. 检查会话是否为空或不
- 27. 检查类是否存在或不orientdb
- 28. 检查FTP连接是否成功或不在Mule任何点?
- 29. 如何检查控件是否获得焦点或不在android
- 30. 检查一个数组的位置是否真的没有定义或不是
你最后一段文字没有任何意义。 – leppie 2010-03-12 09:48:16
这听起来像一个家庭作业的问题,但想太多的人是如何从这个代码snipset .. – Manjoor 2010-03-12 10:26:32
我使用这个在我的工作得到中获益,挣扎是真的。 – cambunctious 2016-06-01 15:41:36