計概--位元子運算的問題?(20點)

2007-01-18 7:52 pm
我現在在學php,遇到了以下的問題
不過,我想,
這應該是計算機概論的問題吧

$a = 6
$b = 10

$a & $b的值是2
$a | $b的值是14
$a ^ $b的值是12
~$a的值是-7
$a>>2 的值是1
$a<<2 的值是24

請問這是怎麼算出來的
可以教教我怎麼算嗎?
或是有哪個網站有教,
提供網址也行
請大家多幫忙了

回答 (3)

2007-01-18 8:36 pm
✔ 最佳答案
我不是做 php 的
但是你的這些問題在每一種語言都一樣
首先要將數值換成 二進位
a = 6 = 00000110
b = 10 = 00001010
a & b=> 00000010 = 2 ( & 且; 兩者都是 1 時才等於 1)
a | b => 00001110 = 14 ( | 或; 兩者有一個是 1 時就等於 1)
a ^ b => 00001100 = 12 ( ^ 互斥; 兩者不一樣時才等於 1)
a >> 2=>00000001 = 1 ( >> 往右邊移; 最左邊補 0)
a << 2=>00011000 = 24 ( << 往左邊移; 最右邊補 0)
~a => 11111001 ( ~ 相反的意思; 1 變0, 0變 1)
但是 因為最左邊是 1, 所以是一個負數 必須用補數的方式來計算
正數變負數的方法: 全部變號後再加 1
負數變正數的方法: 減 1後再全部變號
11111001
=> 11111000 (減 1)
=> 00000111 (全部變號)
= 7
所以 ~ a = -7
如果有問題, 請來函討論. 不然, 我可能會錯失你再補充的疑點.
參考: 我是電腦程式設計師
2007-01-19 11:09 am
這是利用 位元運算的方式,算出來的結果..
上面二個大大講的還滿清楚的哩,只是如果針對php的話

PHP 對於位元運算的支員並不好,它內建並沒有定義(二進制)的Data Type, 更不用說對它們進行運算了,也就是說如果想要利用PHP來達成位元運算的功能,需要用到一些3ed party的東西,才可能做的出來,還不如您用C or Java來的快些...
2007-01-18 8:20 pm

這是單純的二進制運算
6 = (0110)2
10 = (1010)2
6 & 10 = (0010)2 = 2
6 | 10 = (1110)2 = 14
6 ^ 10 = (1100)2 = 12
~ 6 = ~ (0110)2
= (1111 1111 1111 1111 1111 1111 1111 1001)2
= F F F F F F F 9 = - 7 (1 的補數,結果變成負數)
6 >> 2 = (0001)2 = 1 (位元右移)
6 << 2 = (11000)2 = 16+8 = 24 (位元左移)


收錄日期: 2021-04-27 17:14:36
原文連結 [永久失效]:
https://hk.answers.yahoo.com/question/index?qid=20070118000015KK03013

檢視 Wayback Machine 備份