作者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