乙個按鍵檢測與C語言的移位數為負的認識

2021-06-23 04:50:10 字數 2181 閱讀 4791

主要問題在於c語言裡面的移位運算元為負數的時候,不清楚、

key.h 

/*板上按鍵gph2_0-gph2_3 ,gph3_0-gph3_3

其中gph2_0 標註back gph2_1 標註home gph2_2 標註menu*/

#ifndef _key_h_

#define _key_h_

/*key pins*/

#define gph2con (*(volatile unsigned long *) 0xe0200c40)

#define gph2dat(*(volatile unsigned long *) 0xe0200c44)

#define gph3con (*(volatile unsigned long *) 0xe0200c60)

#define gph3dat(*(volatile unsigned long *) 0xe0200c64)

/*下面這是對con暫存器的操作*/

#define gph2_0_intput ~(0xf<

//0000 0000 0000 1111 移位取反 1111 1111 1111 0000

#define gph2_1_intput ~(0xf<

//0000 0000 0000 1111 移位取反 1111 1111 0000 1111

#define gph2_2_intput ~(0xf<

//0000 0000 0000 1111 移位取反 1111 0000 1111 1111

#define gph2_3_intput ~(0xf<

//0000 0000 0000 1111 移位取反 0000 1111 1111 1111

#define gph3_0_intput ~(0xf<

#define gph3_1_intput ~(0xf<

#define gph3_2_intput ~(0xf<

#define gph3_3_intput ~(0xf<

void key_init();

int key_check(int pin);

#endif //_key_h_

key.c

#include"key.h"

/* 按鍵初始化函式 */

void key_init()

int key_check(int pin)

/*pin 等於1的時候 如果tempdat1為1111,&運算後為1,表示沒有被按下*/

return i;//被按下了

}

if語句暫時無法理解,pin是指的1-8個按鍵鍵

tempdat1表示的是1-4號按鍵,tempdat2表示的是5-8號按鍵。

如果pin=1的時候:

如果1號鍵沒有被按下,

tempdat1

低四位為1111 第乙個表示式結果為 1根據短路表示式規則此時不會判斷第二個語句。

所以在檢驗1-4按鍵的時候如果沒有被按下,第二個語句不起作用。

如果1號鍵被按下,

tempdat1

低四位為1110 第乙個表示式結果為0,所以開始判斷第二個語句,代入後裡面包含了1<

所以這樣似乎不妥。 這樣函式有待改進,增強移植性。為了驗證左右移位數為負數的情況,在電腦上實驗:

結果是

符合c和指標書中提到的可能的結果。實際做的是i<

不符合語言的標準,不過通過結果來看,宣告的是乙個無符號字元,本來佔據乙個位元組的空間大小。但是結果卻至少佔據四個位元組。

如果這個變數的位址前面的相鄰的空間已經分配給其他變數,這樣操作似乎會改變這些變數的值,而且是莫名奇妙的沒有提示的情況下改變的。。。

視C 為乙個語言聯邦

c 是個多重泛型程式語言,同時支援以下形式的語言 1 過程形式 2 物件導向形式 3 函式形式 4 泛型形式 5 元程式設計形式。理解c 的方法 將c 視為乙個由相關語言組成的聯邦而非單一語言。在其某個次語言中,各種守則與通例都傾向簡單 直觀易懂 並且容易記住。當從乙個次語言移至另乙個次語言,守則可...

條款01 視C 為乙個語言聯邦

條款01 視c 為乙個語言聯邦 view c as a federation of languages 內容 今天的c 已經是個多重範形程式語言 multiparadigm programming language 乙個同時支援過程形式 procedural 物件導向形式 object orient...

條款1 視C 為乙個語言聯邦

view c as a federation of languages.今天的c 已經是個多重范型程式語言 multiparadigm programming language 乙個同時支援過程形式 procedural 物件導向形式 object oriented 函式形式 functional ...