請教c語言高手~幫忙解答~~~~~~~~~~~
請教c高手~幫忙解答
#define x_0 ((temp5[0]*256)+temp5[1])
#define x_1 ((temp5[2]*256)+temp5[3])
#define y_0 ((temp5[4]*256)+temp5[5])
#define y_1 ((temp5[6]*256)-temp5[7])
char data temp5[8]={32,-26,-32,0,4,-106,-3,150};
這樣
x_0
x_1
y_0
y_1
應各為多少
我用程式求出來是
x_0=31*256+230
x_1=-32*256
y_0=3*256+150
y_1=-3*256+106<<<--這個答案很奇怪 為什麼是這個
還有是
int x_0 =((temp5[0]*256)+temp5[1]) --<這樣的定義為什麼不行
還有為什麼
#define y_1 ((temp5[6]*256)|temp5[7])
這樣的定義為什麼y_1出來的值並不是我想要的
to Joybo:這是晶片用宣告方式 所以是可用的
我是這樣定義 軟體是 keil
int y_axle_min = ((temp5[6]*256)-temp5[7]);
MOTOR_DRIVE.C(19): error C247: non-address/-constant initializer<--這是錯誤訊
可能在這編輯軟體是不合法的
不過有個問題
ex -918
分成 高位元 底位元
-918 /256 -放入高位元
-918%256 -放入底位元
高位元=-3
底位元=150
要復原應該是 (-3*256)|150
我宣告成
#define y_1 ((temp5[6]*256) | temp5[7])
這樣合出來的值又不對為什麼???
((temp5[6]*256) | temp5[7])
不知道為什這樣的寫法 跑出來的值真的很奇怪
應該說 temp5[6]*256-->好像沒作!!
1 個解答
- JoyboLv 51 0 年前最佳解答
char data temp5[8]={32,-26,-32,0,4,-106,-3,150};
可以這樣設定嗎?
是不是應該只有char temp5[8]={32,-26,-32,0,4,-106,-3,150};
沒有data這個東西
2007-10-09 19:43:37 補充:
#define y_1 ((temp5[6]*256)|temp5[7])
以char來說,以二進制來看是放0000 0000 ~1111 1111
第一位是用來被正負號
換成十進制來說,char是放127 ~ -128
而你150實際上是1001 0110
會變成負數的001 0110,也就是1001 0110
那我們怎麼知道1001 0110是多少呢
由於他是負數,所以我們用signed-1's complement
會變成1110 1001,最後在經由signed-2's complement
變成1110 1010
110 1010在十進制是106,在加上最前面的1變成負號
就是-106
所以你的y_1是
-3*256-temp5[7]=-3*256-(-106)=-3*256+106
至於int x_0 =((temp5[0]*256)+temp5[1])這個問題
我試是很正常,會不會是你和#define的宣告方式一樣
後面沒加分號;
或是你直接放在int main()裡面
若還不懂就貼個錯誤訊息看一下吧
2007-10-10 13:13:26 補充:
抱歉沒接觸過Keil C
所以實際上可能遇到的問題無法給你精確的回答
我上網看了一下
Summary *** Error C247 Non-Address/Constant Initializer
Description A valid initializer expression must evaluate to a constant value or the name of an object plus or minus a constant.
2007-10-10 13:13:39 補充:
若第19行是int y_axle_min = ((temp5[6]*256)-temp5[7]);
你參考看看這個網頁最下面,或許有一點幫助
http://delphi.ktop.com.tw/board.php?cid=173&fid=11...
高位元=-3
底位元=150
要復原應該是 (-3*256)|150
=> 改成 -(3*256)|150
=> 我在VC6測
int n = -918;
int temp1 = n / 256, temp2 = n % 256;
= > temp1 = -3, temp2 = -150 而非 150
2007-10-10 13:14:25 補充:
更正,應該是-(3*256|150)