【发布时间】:2012-01-21 23:19:53
【问题描述】:
假设我必须在下表中列出值(第一行是描述)
描述 -> 十进制值 -> 位号
选项1 -> 1 -> 1
选项2 -> 2 -> 2
选项3 -> 4 -> 3
选项4 -> 8 -> 4
OptionX -> 137438953472 -> 38
现在我有以下值:0x7000000800000000。我如何识别根据该数字选择了哪些选项?
【问题讨论】:
假设我必须在下表中列出值(第一行是描述)
描述 -> 十进制值 -> 位号
选项1 -> 1 -> 1
选项2 -> 2 -> 2
选项3 -> 4 -> 3
选项4 -> 8 -> 4
OptionX -> 137438953472 -> 38
现在我有以下值:0x7000000800000000。我如何识别根据该数字选择了哪些选项?
【问题讨论】:
ulong v = 0x7000000800000000;
for( int i = 1; v != 0; ++i ) {
if ((v & 1) != 0) Console.WriteLine(i);
v >>= 1;
}
或使用BitVector 类。
【讨论】:
if (i = 5) 的错误尝试。 (误导,因为它没有捕捉到if (b = false))
ulong.TryParse。由于您的字符串是十六进制的,请使用 NumberStyles.AllowHexSpecifier 标志。
使用按位与运算符&,也可能使用位移运算符<<(左移)和>>(右移)。
例如,如果(options & (1 << (n - 1))) != 0 为真,则选择了选项n。
【讨论】: