Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/316.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# 理解If语句字节运算符_C#_Byte - Fatal编程技术网

C# 理解If语句字节运算符

C# 理解If语句字节运算符,c#,byte,C#,Byte,我下载了一些USB控制的继电器开关。我需要为一个应用程序操作这段代码,但是我在理解字节运算符时遇到了困难 我看过位移位运算符,我知道它们将位移位到下一个2的幂。以下是我正在努力解决的功能: byte[] SerBuf = new byte[64]; byte states = 0; private void button_pressed(object sender, MouseEventArgs e) { // Check type of sender to

我下载了一些USB控制的继电器开关。我需要为一个应用程序操作这段代码,但是我在理解字节运算符时遇到了困难

我看过位移位运算符,我知道它们将位移位到下一个2的幂。以下是我正在努力解决的功能:

byte[] SerBuf = new byte[64];
byte states = 0;
private void button_pressed(object sender, MouseEventArgs e)
       {
           // Check type of sender to make sure it is a button
           if (sender is Button)
           {
               if (usb_found == 1)
               {
                   Button button = (Button)sender;
                   // Check the title of the button for which realy we wish to change
                   // And then check the state of that relay and send the appropriate command to turn it on or off
                   switch (button.Text.ToString())
                   {
                       case "Relay 1":
                           if ((states & 0x01) == 0) SerBuf[0] = 0x65; //<this is the bit I don't understand
                           else SerBuf[0] = 0x6F;
                           //Thread.Sleep(2000);
                           break;
                       case "Relay 2":
                           if ((states & (0x01 << 1)) == 0) SerBuf[0] = 0x66; //<this is the bit I don't understand
                           else SerBuf[0] = 0x70;
                           break;
                       case "Both":
                           SerBuf[0] = 0x64;
                           break;
                       case "None":
                           SerBuf[0] = 0x6E;
                           break;
                   }
                   transmit(1); // this sends the new buffer to the relay board

               }
           }
byte[]SerBuf=新字节[64];
字节状态=0;
按下专用无效按钮(对象发送器,鼠标目标e)
{
//检查发送器的类型,确保它是一个按钮
如果(发送者是按钮)
{
如果(usb_found==1)
{
按钮=(按钮)发送器;
//检查我们希望更改的按钮的标题
//然后检查继电器的状态,并发送相应的命令将其打开或关闭
开关(button.Text.ToString())
{
案例“继电器1”:

如果((states&0x01)==0)SerBuf[0]=0x65;//则
&
运算符为位和运算符。它逐位比较两个操作数。仅当设置了某个位置的两个位时,才会设置结果中的对应位

因此,假设您有
a
b
,其中
a
表示为位字符串的是
00001101
,而
b
表示为
00001011
。然后
a和b
表示为位字符串的是
00001001
,因为

           +----- no bit is set
           |+---- both bits are set
           ||+--- only one bit is set  
           |||+-- only one bit is set  
           ||||+- both bits are set
           vvvvv
a     = 00001101
b     = 00001011
----------------
a & b = 00001001

因此,换句话说
(states&0x01)==0
当且仅当
状态为偶数时才为真,即写入一个以
0
结尾的位字符串。请记住
0x01
00000001
写入一个位字符串。

运算符是位和运算符。它将两个操作数逐位进行比较。仅当某个位置的两个位都设置为设置结果中的相应位

因此,假设您有
a
b
,其中
a
表示为位字符串的是
00001101
,而
b
表示为
00001011
。然后
a和b
表示为位字符串的是
00001001
,因为

           +----- no bit is set
           |+---- both bits are set
           ||+--- only one bit is set  
           |||+-- only one bit is set  
           ||||+- both bits are set
           vvvvv
a     = 00001101
b     = 00001011
----------------
a & b = 00001001

因此,换句话说,
(states&0x01)==0
为真,当且仅当
states
为偶数时,即作为位字符串写入,它以
0
结尾。请记住,
0x01
是作为位字符串写入的
00000001

&
是按位“且”.0x01是二进制00000001.
((states&0x01)
屏蔽了除第一位以外的所有
状态
;因此,如果状态为
0x02
(二进制
00000010
),
((状态&0x01)==0
。如果状态为0x03(二进制
00000011
),
((状态&0x01)==1
。如果状态为0x07(
00000111
),
((状态&0x01)==1
。@đěxěŕ我理解
0x01
=1。但是如果
states=0
0x01=1
,如何在代码中计算为零?如果状态的最低阶位为1,则状态&0x01返回1,如果状态的最低阶位为0,则返回零。如果状态为0,则所有位都为零,包括该位。这是我的这不是移位操作,而是逻辑操作。出于明显的原因,我们称之为“掩蔽”。
(states&0x04)
将查看第三位,因为0x04==二进制00000100。0x06是00000110,因此将查看第二位和第三位。0001100&0000110==0000100--只有在这两个位中都是1的位才能通过表达式。@EdPlunkett感谢您的解释,首先得到它。@EdPlunkett-啊哈!这很有道理!谢谢!
&
是按位“和”.0x01是二进制00000001。
((状态&0x01)
屏蔽了除第一位以外的所有
状态
;因此,如果状态是
0x02
(二进制
00000010
),
((状态&0x01)==0
。如果状态是0x03(二进制
00000011
),
((状态&0x01)==1
)如果状态是0x07(
00000111
),
((states&0x01)==1
。@đěxěŕ我理解
0x01
=1。但是如果
states=0
0x01=1
,如何在代码中计算为零?如果状态的最低阶位为1,则状态&0x01返回1,如果状态的最低阶位为0,则返回零。如果状态为0,则所有位都为零,包括该位。这是我的这不是移位操作,而是逻辑操作。出于明显的原因,我们称之为“掩蔽”。
(states&0x04)
将查看第三位,因为0x04==binary 00000100。0x06是00000110,因此将查看第二位和第三位。0001100&0000110==0000100--只有在这两个位中都是1的位才能通过表达式。@EdPlunkett感谢您的解释,首先得到它。@EdPlunkett-啊哈!这很有道理!谢谢!