Re: DSPIC算式問題
|
||||
---|---|---|---|---|
版主
|
我想是你使用錯的格式看變數。不管是有號數及無號數值皆以 16 進制值顯示。你必須在 Watch Window 底下選擇所要看的變數的種類。你可以將要觀i測的有號數變數選成 Decimal 並將旁邊的 Signed 選項打勾後就可以看到正確的有號數顯示方式。
發表於: 2007/10/5 16:06
|
|||
|
Re: DSPIC算式問題
|
||||
---|---|---|---|---|
資深會員
|
參照:
感覺您還是沒弄懂2進制有號數的加減法是怎麼運算的 可以下載這幾個檔案 http://www.cis.nctu.edu.tw/~gis91572/ ... ircuit_YP/chap01_2006.ppt http://www.ccmtc.edu.tw/know/upload/521-1.ppt 先把2進制觀念搞懂了之後,寫程式就沒什麼問題了
發表於: 2007/10/5 15:15
|
|||
|
Re: DSPIC算式問題
|
||||
---|---|---|---|---|
資深會員
|
把最高位元當成正負號旗標,十進制數值範圍:-32768~0~+32767計算不要超出範圍就不會有問題了。
發表於: 2007/10/5 11:43
|
|||
|
Re: DSPIC算式問題
|
||||
---|---|---|---|---|
中級會員
|
我用有號數好無號數用出來ㄉ0x8000都一樣是顯示0x8000ㄋ
事簿是我ㄉ哪裡設定錯 有號數我是設定 int 無號是我是設定 unsigned int
發表於: 2007/10/5 10:07
|
|||
|
Re: DSPIC算式問題
|
||||
---|---|---|---|---|
版主
|
當你把變數宣告成 Signed 後,C 就會以有號數的方式進行處理或運算,所看到的結果也會是有號數。
你可能還是不清楚有號數的表示方式,問你一下0x8000在有號數裡代表的直是多少? 要是無號數時噢是多少?那 0x8001 呢?
發表於: 2007/9/27 15:00
|
|||
|
Re: DSPIC算式問題
|
||||
---|---|---|---|---|
中級會員
|
列如:
C = A - B x=C*2 y=C*3 z=C*10 q=x+y+z w += q 在C=正時都對 但C=負時,就會變補數去計算 但算出來q並不是用負ㄉ去算還是用正ㄉ去算ㄋ 正常來說 如果c=負ㄉ 那我ㄉq應該要變負ㄉ 但w就便減qㄌ 但他還是加上補數ㄉq 那該怎ㄇ半 誰能教我 負ㄉ要怎ㄇ做 我用c寫ㄉ[quote]
發表於: 2007/9/27 11:51
|
|||
|
Re: DSPIC算式問題
|
||||
---|---|---|---|---|
版主
|
沒錯的,在電腦的世界裡負數是以2's 方式表示的,執行減法時實際是採用 2'S 的加法用算。
-1 的值是你所看的懂的,實際會成 0xFFFF,-2 為 0xFFFE。這是對的。只是你比較少接觸會覺得怪怪的。在強調一次 它所呈現的值並沒有錯。
發表於: 2007/9/21 11:49
|
|||
|
Re: DSPIC算式問題
|
||||
---|---|---|---|---|
中級會員
|
我是用C寫ㄉㄚ.但他負ㄉㄝ是表示成補數阿.並沒有負數ㄋ
我故意用一個暫存器設定-1.他出來ㄝ是0xFFFEㄋ.這樣我後面ㄉ計算就錯誤ㄌ
發表於: 2007/9/20 15:48
|
|||
|
Re: DSPIC算式問題
|
||||
---|---|---|---|---|
版主
|
dsPIC 在乘法及除法指令都有支援有號數的計算,唯獨加法與減法指令沒有支援有號數計算,所以在做有號數加、減法時必須單獨區判斷N旗號來決定要做何種算式。
用 C 寫就沒有這些困擾,考慮看看用C30來寫。
發表於: 2007/9/20 14:43
|
|||
|
DSPIC算式問題
|
||||
---|---|---|---|---|
中級會員
|
請問一下我2各數相減.有正或負
我用ㄉ暫存器是可以正負的.但我發現他的值若是負ㄉ 它還是惠是正ㄉ.只是取補數.請問有辦法讓他算出來如果是負ㄉ 就存成負的值嗎?? 像如果是"-1"用16位元ㄉ暫存器會存成0xfffe 這樣沒辦法辨識是正還是負.我再來ㄉ運算就出問題ㄌ
發表於: 2007/9/20 12:06
|
|||
|