作者chhsiao (bye~)
看板b96902HW
標題Re: [問題] Dev C的問題
時間Sat Sep 29 00:29:49 2007
※ 引述《lwkspy (平)》之銘言:
: 想請問下為什麼平方了,答案還是會有負數
: 就好像Z=(((x2-x1)^2)+((y2-y1)^2)) ,
: 他的答案出來後,有時會是負數的...
: 希望各位高手幫幫忙啦!謝謝
p 老師上課的時候說過,
"compiler 很笨,所以你要用 compiler 的話來和 compiler 溝通!"
因此,初學程式的新手一定要注意
你得用 compiler 懂的方式來表達喔
比方說 "^" 吧,雖然 compiler 沒叫說他看不懂,
可是 compiler 有可能因為跟你有語言隔閡而誤解你!
課堂上目前教過的 operators 只有:
+ - * / % = == != >= <= > <
如果你想要用其他的 operators,
就得先確定 compiler 對那些符號的定義跟你一樣。
其實除了上課教過的以外, C 還有其他的 operators,
其中有一類是可以把兩個變數做 bit 間的兩兩運算的,
"^" 就是屬於這種,它會對兩個變數的二進位碼做 bitwise XOR。
比方說
00110100 ^ 10011001 結果是會 10101101
然後電腦又根據用二進位存整數的規則把這串二進位碼「翻譯」成整數,
因此結果可能正好是某一個負數的二進位碼了。
--
n;main(i){return n?i<2?i:main(i-1)+main(i-2):
scanf("%d",&n)&&printf("%d\n",n>0?main(n):0);}
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.112.30.54
※ 編輯: chhsiao 來自: 140.112.30.54 (09/29 00:31)
※ 編輯: chhsiao 來自: 140.112.30.54 (09/29 00:39)
1F:推 imprazaguy:題外話,^有一個應用,就是可以做變數值交換的動作 09/29 00:37
2F:→ imprazaguy:#define swap(a,b) ((a)^=(b)^=(a)^=(b)) 09/29 00:39
3F:→ imprazaguy:以上巨集就可以把a,b值互換而不需暫存變數,但有個缺點 09/29 00:39
4F:→ imprazaguy:是只能使用在整數型別 09/29 00:40
5F:→ SRXtw:喔喔 那個a=b就沒用了 09/29 00:43
6F:推 chhsiao:不只整數喔 「整數系列」都可以 :p 09/29 00:53
7F:推 chhsiao:不是整數的話 可以用 pointer 轉型來惡搞 XD 09/29 01:02
8F:→ chhsiao:只要轉型的 type size 要跟原來的一樣 09/29 01:02