将C#中的整数转换为二进制字符串再转换为数组

3

我正在学习c#,想要找出一个整数的第三位是1还是0。

因此,我的方法是将int转换为二进制。 然后将字符串转换为数组。 将包含字符串的数组转换为包含整数的数组,并在第3位上切片并检查值。

但我无法实现这一点。 这就是我的进展。 我正在使用SO上的示例进行转换

using System;
using System.Text;

class Expression
{
    static void Main()
    {
        int number = 3;
        string binValue = Convert.ToString(number, 2);

        char[] array = binValue.ToCharArray();
        array<int> list = new List<int>();
        for (int i = 0; i < array.Length; i++)
        {
            list.add(value);
        }

        int[] binArr = list.ToArray();
        binArr[2] == 1? "Yes" : "No";
    }
}

1
有一种更简单的方法可以做到这一点:使用位掩码。请参考以下示例:https://dev59.com/rXA75IYBdhLWcg3wf5NV 或者 https://dev59.com/PGYq5IYBdhLWcg3wcgPq - Ronald Wildenberg
2个回答

3

那完全是错误的做法;只需执行二进制算术:

bool bit3IsSet = (number & 4) != 0;

其中4是第3位二进制位;您也可以使用以下代码:

int bitNumber = 3; // etc
bool bitIsSet = (number & (1 << (bitNumber-1))) != 0;

在一般情况下。


那就容易多了。噢,不过我走错路还是学到了很多东西。 - sayth
我得到了任何数字值的True。使用System; using System.Text;class Expression { static void Main() { int number = 100; string binValue = Convert.ToString(number, 2); System.Console.WriteLine(binValue); bool bit3IsSet = (number & 4) != 0; System.Console.WriteLine(bit3IsSet); } } #输出 C:\Users\Sayth\Documents\Scripts>Expression 1100100 True - sayth
@sath and bit 3 is set for 100 ;p 尝试96或104 - Marc Gravell
我数数的方式错了,是从左往右数错了,应该是从右往左数。 - sayth
1
啊,我明白了;传统上,你通常从右到左计算位数,即从最低有效位开始。你也可以反过来做,但会更难;首先你需要找到最高位的设置等等。 - Marc Gravell
顺便提一下,当前计划是让Roslyn支持二进制字面量。这将允许您将bool bit3IsSet = (number & 4) != 0;替换为bool bit3IsSet = (number & 0b00000100) != 0;。它是否更易读实际上取决于它的使用方式。 - Brian

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接