※ 引述《ladios (家聚囉!)》之銘言:
: ※ 引述《conbawa (:)喵...午安啊..)》之銘言:
: : 今天想請教一個C語言的問題 .........
: : 那就是
: : a&b 中的&是作什麼用的??
: : 若a為二進制的1011 b是1101
呵呵,原本 pest 回答地好好的, ladios 就是喜歡來插花,
那我只好來吐槽一下。
: 如果我沒記錯的話,"&"是交集之意,也就是當a和b都是
: true時,a&b才會是true!
: 0=false
: 1=ture
: 所以0&0=0,0&1=0,1&0=0,1&1=1
在 C 當中,一個值到底是真是假,是這樣決定的:
0 => false
非0 => true
所以,要推翻你的言論,我只要用:
a = 10
b = 1
a&b = 00
就得到反證啦。
不過事實也不完全是這樣的;
在 C 裡面,有兩種很像的東西,一個是 & ,另一個是 && 。
a && b 這個值,是當 a 和 b 兩個同時都是 true 的時候,
會是 1 ,不然的話,就是 0 。
所以, 1 && 1 = 1
0 && 1 = 0
1 && 0 = 0
0 && 0 = 0 到這裡都跟你差不多。
10 && 1 = 1 呵呵,前面 10 是 true ,後面是 1
也是 true ,所以就應該是 1 。
a & b 這個值就很有學問了,在算出它的值之前,我們要先
把 a 和 b 這兩個是用二進位來表示。對於 a 和 b
中每個相對應的 bit ,都來做一次
0&0=0, 0&1=0, 1&0=0, 1&1=1 的運算,然後再把那
些算出來的 bit 拼起來,就是答案了。
a = 1 1 0 1 0 1 0
b = 0 1 1 0 0 0 1
a&b = 0 1 0 0 0 0 0
我個人的看法是,
&& 是很宏觀的角度,對於 A 和 B 兩個值做 and 運算。
& 是很微觀的角度,對於 A 和 B 裡的每一個 bit 做 and 運算。
而 && 通常被稱作是 logical operator 的一種
& 則是 bitwise operator 。
呵呵,這種觀念本來是要 pest 來 po 的,
結果今天畫線居然丟水球叫我回答,
然後再看到 ladios 故意拋磚引玉,
最後我就上鉤了。
--
※ 發信站: 批踢踢實業坊(ptt.m8.ntu.edu.tw)
◆ From: Port6.TS2.neto.