看板 b96902HW 關於我們 聯絡資訊
※ 引述《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)
imprazaguy:題外話,^有一個應用,就是可以做變數值交換的動作 09/29 00:37
imprazaguy:#define swap(a,b) ((a)^=(b)^=(a)^=(b)) 09/29 00:39
imprazaguy:以上巨集就可以把a,b值互換而不需暫存變數,但有個缺點 09/29 00:39
imprazaguy:是只能使用在整數型別 09/29 00:40
SRXtw:喔喔 那個a=b就沒用了  09/29 00:43
chhsiao:不只整數喔 「整數系列」都可以 :p 09/29 00:53
chhsiao:不是整數的話 可以用 pointer 轉型來惡搞 XD 09/29 01:02
chhsiao:只要轉型的 type size 要跟原來的一樣 09/29 01:02