http://gharee.com/wiki/index.php?action=history&feed=atom&title=%E4%BD%8D%E6%88%96 123,123 2025-06-28T17:38:17Z 本wiki的該頁面的版本歷史 MediaWiki 1.21.2 http://gharee.com/wiki/index.php?title=%E4%BD%8D%E6%88%96&diff=49&oldid=prev Admin:以“按位或(|)<br> 在C++中按位或運(yùn)算符是垂直的條桿符號(hào),|。就像&運(yùn)算符,|獨(dú)立地計(jì)算它周圍的兩個(gè)整型表達(dá)式的每一位。...”為內(nèi)容創(chuàng)建頁面 2014-09-12T05:30:52Z <p>以“按位或(|)&lt;br&gt; 在C++中按位或運(yùn)算符是垂直的條桿符號(hào),|。就像&amp;運(yùn)算符,|獨(dú)立地計(jì)算它周圍的兩個(gè)整型表達(dá)式的每一位。...”為內(nèi)容創(chuàng)建頁面</p> <p><b>新頁面</b></p><div>按位或(|)&lt;br&gt;<br /> <br /> <br /> 在C++中按位或運(yùn)算符是垂直的條桿符號(hào),|。就像&amp;運(yùn)算符,|獨(dú)立地計(jì)算它周圍的兩個(gè)整型表達(dá)式的每一位。(當(dāng)然)它所做的是不同的(操作)。兩個(gè)輸入位其中一個(gè)或都是1按位或?qū)⒌玫?,否則為0。換句話說:&lt;br&gt;<br /> &lt;pre style=&quot;color:red&quot;&gt;<br /> 0 0 1 1 operand1<br /> 0 1 0 1 operand2<br /> ----------<br /> 0 1 1 1 (operand1 | operand2) - returned result<br /> <br /> &lt;/pre&gt;<br /> 這是一個(gè)使用一小斷C++代碼描述的按位或(運(yùn)算)的例子:&lt;br&gt;<br /> &lt;pre style=&quot;color:green&quot;&gt;<br /> int a = 92; // in binary: 0000000001011100<br /> int b = 101; // in binary: 0000000001100101<br /> int c = a | b; // result: 0000000001111101, or 125 in decimal.<br /> &lt;/pre&gt;<br /> <br /> <br /> <br /> 按位與和按位或的一個(gè)共同的工作是在端口上進(jìn)行程序員稱之為讀-改-寫的操作。在微控制器中,每個(gè)端口是一個(gè)8位數(shù)字,每一位表示一個(gè)引腳的狀態(tài)。寫一個(gè)端口可以同時(shí)控制所有的引腳。&lt;br&gt;<br /> <br /> <br /> PORTD是內(nèi)建的參照數(shù)字口0,1,2,3,4,5,6,7的輸出狀態(tài)的常量。如果一個(gè)比特位是1,那么該引腳置高。(引腳總是需要用pinMode()指令設(shè)置為輸出模式)。所以如果我們寫入PORTD = B00110001;我們就會(huì)讓引腳2,3和7輸出高。一個(gè)小小的問題是,我們同時(shí)也改變了某些引腳的0,1狀態(tài)。這用于Arduino與串口通訊,所以我們可能會(huì)干擾串口通訊。&lt;br&gt;<br /> <br /> <br /> 我們的程序規(guī)則是:&lt;br&gt;<br /> 僅僅獲取和清除我們想控制的與相應(yīng)引腳對(duì)應(yīng)的位(使用按位與)。&lt;br&gt;<br /> 合并要修改的PORTD值與所控制的引腳的新值(使用按位或)。&lt;br&gt;<br /> &lt;pre style=&quot;color:green&quot;&gt;<br /> int i; // counter variable<br /> int j;<br /> <br /> void setup(){<br /> DDRD = DDRD | B11111100; // set direction bits for pins 2 to 7, leave 0 and 1 untouched (xx | 00 == xx)<br /> // same as pinMode(pin, OUTPUT) for pins 2 to 7<br /> Serial.begin(9600);<br /> }<br /> <br /> void loop(){<br /> for (i=0; i&lt;64; i++){<br /> <br /> PORTD = PORTD &amp; B00000011; // clear out bits 2 - 7, leave pins 0 and 1 untouched (xx &amp; 11 == xx)<br /> j = (i &lt;&lt; 2); // shift variable up to pins 2 - 7 - to avoid pins 0 and 1<br /> PORTD = PORTD | j; // combine the port information with the new information for LED pins<br /> Serial.println(PORTD, BIN); // debug to show masking<br /> delay(100);<br /> }<br /> }<br /> &lt;/pre&gt;</div> Admin