zgkjzf 发表于 2013-9-13 22:58:32

谁能帮我解释下这个代码 没看明白


if(dataOut&(1<<i))
      {
      pinState=HIGH;
      }
else
      {
      pinState=LOW;
      }

AndersonBY 发表于 2013-9-14 01:36:32

本帖最后由 AndersonBY 于 2013-9-14 01:42 编辑

楼主主要是这句没看懂吧:dataOut&(1<<i)
1<<i表示1向左移i位,比如i如果是3则1<<i=1<<3=100,注意100是二进制

然后&表示按位逻辑与,dataOut&(1<<i)就表示dataOut转为二进制后和1<<i按位进行逻辑与的判断

逻辑与解释:1和1进行逻辑与运算则为1,1和0进行逻辑与运算则为0,0和0进行逻辑与运算则为0。

按位逻辑与解释:两个数按照二进制,每个对应的位都进行逻辑与的判断。
假如两个二进制数a=10100,b=10010,则a和b进行逻辑与则为:
10100
10010
----------
10000


原语句举例:
1.
dataOut = 10100   (二进制)
1<<i = 100 (二进制)
dataOut&(1<<i) = 10100&100 = 100 (二进制)

2.
dataOut = 10010   (二进制)
1<<i = 100 (二进制)
dataOut&(1<<i) = 10100&100 = 0 (二进制)

zgkjzf 发表于 2013-9-14 05:29:12

AndersonBY 发表于 2013-9-14 01:36 static/image/common/back.gif
楼主主要是这句没看懂吧:dataOut&(1

谢谢 :victory:

林定祥 发表于 2013-9-14 09:29:58

高手写的天书,确实难懂。
页: [1]
查看完整版本: 谁能帮我解释下这个代码 没看明白