匿名使用者
匿名使用者 發問時間: 電腦與網際網路程式設計 · 1 0 年前

請教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<--這是錯誤訊

可能在這編輯軟體是不合法的

2 個已更新項目:

不過有個問題

ex -918

分成 高位元 底位元

-918 /256 -放入高位元

-918%256 -放入底位元

高位元=-3

底位元=150

要復原應該是 (-3*256)|150

我宣告成

#define y_1 ((temp5[6]*256) | temp5[7])

這樣合出來的值又不對為什麼???

3 個已更新項目:

((temp5[6]*256) | temp5[7])

不知道為什這樣的寫法 跑出來的值真的很奇怪

應該說 temp5[6]*256-->好像沒作!!

1 個解答

評分
  • 1 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)

還有問題?馬上發問,尋求解答。