2015-04-02 111 views
-2

我不明白爲什麼「1 < < 5」,在下面的代碼片段中,沒有對谷歌C代碼格式<<

gpio_output_set((1<<5), 0, (1<<5), 0); 

找到任何東西爲什麼不使用5?或32? :)

感謝您的幫助

+2

你知道'1 << 5'的價值嗎?絕對不是5.編寫幾行代碼並檢查其值。 – 2015-04-02 12:46:26

+1

看這裏:http://stackoverflow.com/questions/141525/absolute-beginners-guide-to-bit-shifting – Downvoter 2015-04-02 12:47:59

+1

它被稱爲「轉變」運營商。具體來說,這是一個左移運算符,它的作用是將左參數('1')的位左移多個位置('100000' = 32) – 2015-04-02 12:49:13

回答

0

表達1<<5的值等於32和相當於2^5(在數學表示法)

<<是按位左移位運算符。

從C標準(6.5.7按位的移位運算符)

4 E1的結果< < E2是E1左移E2位位置;騰空的 位填充了零。

我覺得這張唱片

gpio_output_set((1<<5), 0, (1<<5), 0); 

來代替

gpio_output_set(32, 0, 32, 0); 

,要說明如何獲取值。但在任何情況下,它是一個壞主意,用幻數類似5

+4

'2^5'是一個不幸的選擇在這方面。 – Wintermute 2015-04-02 12:50:38

+0

@Wintermute爲什麼? – 2015-04-02 12:54:29

+0

因爲'^'是C中的二進制XOR。請嘗試''''(直接在標記中,而不是在反引號之間)。 – Wintermute 2015-04-02 12:56:29

1

自1 < < 5是場外逐位操作,所以它是小數5 操作1 < <完全不同5將給出十進制值32.

2

「爲什麼不使用32?」

因爲沒有人(包括編寫代碼的人,一年以後)知道什麼gpio_output_set(32)意味着什麼。在這種情況下,32就是所謂的「幻數」,它是程序員俚語中的一個硬編碼數字,它只在你的代碼中存在,沒有合理的解釋,爲什麼它只是神奇地完成了工作。這是非常糟糕的編程習慣。

1<<5另一方面,是行業事實上的標準方式說「位數5」。程序員的意圖很明確。

只要有可能,總是努力編寫自我記錄代碼。

+0

謝謝!有趣的 – peterretief 2015-04-02 14:27:14

+0

引腳定義爲BIT0到BITX,所以我期望BIT5 – peterretief 2015-04-04 10:33:29