Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
以字节为单位的c#位顺序_C#_Byte_Bit_Bit Shift - Fatal编程技术网

以字节为单位的c#位顺序

以字节为单位的c#位顺序,c#,byte,bit,bit-shift,C#,Byte,Bit,Bit Shift,您好,我正在努力理解如何获取或设置位,我被位顺序卡住了。假设我有一个数字70,它是01000110。我想将第一位更改为true,使其变为11000110,即198。我不明白或困惑的是我找到的方法 public static void Set(ref byte aByte, int pos, bool value) { if (value) { //left-shift 1, then bitwise OR aByte = (byte)(aByte

您好,我正在努力理解如何获取或设置位,我被位顺序卡住了。假设我有一个数字70,它是01000110。我想将第一位更改为true,使其变为11000110,即198。我不明白或困惑的是我找到的方法

public static void Set(ref byte aByte, int pos, bool value)
{
    if (value)
    {
        //left-shift 1, then bitwise OR
        aByte = (byte)(aByte | (1 << pos));
    }
    else
    {
        //left-shift 1, then take complement, then bitwise AND
        aByte = (byte)(aByte & ~(1 << pos));
    }
}

public static bool Get(byte aByte, int pos)
{
    //left-shift 1, then bitwise AND, then check for non-zero
    return ((aByte & (1 << pos)) != 0);
}
公共静态无效集(参考字节aByte、int pos、bool值)
{
如果(值)
{
//左移位1,然后按位或
aByte=(字节)(aByte |(1
为什么字节中的第一位会随着最后一位的索引而改变

基本上,位通常是指最低有效位是位0,然后下一位是位1等。例如:

Bit:   76543210
Value: 01000110
因此,一个值为70(十进制)的字节设置了位1、2和6。仅仅因为我们先写了一个具有最高有效位的字节,并不意味着我们将其视为“第一位”。(事实上,我可能会说它是“最高有效位”或“高位”,而不是使用“第一位”。)

这个方案的好处是,它意味着无论值有多长,你都会得到相同的值-位0总是“值”1,位1总是值2,位7总是128等等

现在,所有这些实际上都不会影响您的代码,它不关心我们称之为什么,但它关心的是值。幸运的是,命名约定在这方面也有帮助。您只需要将值1(即“只设置了0位”)移位即可左移
pos
位得到位
pos
。例如,要得到位5,我们只需将1左移5位得到100000

如果将1的值看作一个完整字节(00000001),它可能会变得更清晰:

00000001 << 0 = 00000001
00000001 << 1 = 00000010
00000001 << 2 = 00000100
00000001 << 3 = 00001000
00000001 << 4 = 00010000
00000001 << 5 = 00100000
00000001 << 6 = 01000000
00000001 << 7 = 10000000
00000001
为什么字节中的第一位会随着最后一位的索引而改变

基本上,位通常是指最低有效位是位0,然后下一位是位1等。例如:

Bit:   76543210
Value: 01000110
因此,一个值为70(十进制)的字节设置了位1、2和6。仅仅因为我们先写了一个具有最高有效位的字节,并不意味着我们将其视为“第一位”。(事实上,我可能会说它是“最高有效位”或“高位”,而不是使用“第一位”。)

这个方案的好处是,它意味着无论值有多长,你都会得到相同的值-位0总是“值”1,位1总是值2,位7总是128等等

现在,所有这些实际上都不会影响您的代码,它不关心我们称之为什么,但它关心的是值。幸运的是,命名约定在这方面也有帮助。您只需要将值1(即“只设置了0位”)移位即可左移
pos
位得到位
pos
。例如,要得到位5,我们只需将1左移5位得到100000

如果将1的值看作一个完整字节(00000001),它可能会变得更清晰:

00000001 << 0 = 00000001
00000001 << 1 = 00000010
00000001 << 2 = 00000100
00000001 << 3 = 00001000
00000001 << 4 = 00010000
00000001 << 5 = 00100000
00000001 << 6 = 01000000
00000001 << 7 = 10000000
00000001
为什么字节中的第一位会随着最后一位的索引而改变

基本上,位通常是指最低有效位是位0,然后下一位是位1等。例如:

Bit:   76543210
Value: 01000110
因此,一个值为70(十进制)的字节设置了位1、2和6。仅仅因为我们先写了一个具有最高有效位的字节,并不意味着我们将其视为“第一位”。(事实上,我可能会说它是“最高有效位”或“高位”,而不是使用“第一位”。)

这个方案的好处是,它意味着无论值有多长,你都会得到相同的值-位0总是“值”1,位1总是值2,位7总是128等等

现在,所有这些实际上都不会影响您的代码,它不关心我们称之为什么,但它关心的是值。幸运的是,命名约定在这方面也有帮助。您只需要将值1(即“只设置了0位”)移位即可左移
pos
位得到位
pos
。例如,要得到位5,我们只需将1左移5位得到100000

如果将1的值看作一个完整字节(00000001),它可能会变得更清晰:

00000001 << 0 = 00000001
00000001 << 1 = 00000010
00000001 << 2 = 00000100
00000001 << 3 = 00001000
00000001 << 4 = 00010000
00000001 << 5 = 00100000
00000001 << 6 = 01000000
00000001 << 7 = 10000000
00000001
为什么字节中的第一位会随着最后一位的索引而改变

基本上,位通常是指最低有效位是位0,然后下一位是位1等。例如:

Bit:   76543210
Value: 01000110
因此,一个值为70(十进制)的字节设置了位1、2和6。仅仅因为我们先写了一个具有最高有效位的字节,并不意味着我们将其视为“第一位”。(事实上,我可能会说它是“最高有效位”或“高位”,而不是使用“第一位”。)

这个方案的好处是,它意味着无论值有多长,你都会得到相同的值-位0总是“值”1,位1总是值2,位7总是128等等

现在,所有这些实际上都不会影响您的代码,它不关心我们称之为什么,但它关心的是值。幸运的是,命名约定在这方面也有帮助。您只需要将值1(即“只设置了0位”)移位即可左移
pos
位得到位
pos
。例如,要得到位5,我们只需将1左移5位得到100000

如果将1的值看作一个完整字节(00000001),它可能会变得更清晰:

00000001 << 0 = 00000001
00000001 << 1 = 00000010
00000001 << 2 = 00000100
00000001 << 3 = 00001000
00000001 << 4 = 00010000
00000001 << 5 = 00100000
00000001 << 6 = 01000000
00000001 << 7 = 10000000
00000001