Discussion:
[問題] 一個程式寫法的問題???
(时间太久无法回复)
visa-sai
2006-08-16 22:59:47 UTC
Permalink
小弟現在正在看一個範例

我看到這段後,看不出它程式的意思是什麼

如下

A 為讀入一個串流資料(資料為二進位,假設有32 bit)
B 是一個long型態

long b = 0 ;
for (int i = 0; i<4; i++) {
b = (b << 8) | A.read();
}

我重點是搞不懂為什麼 有這個符號 " | " (or ???)

--
▁▁
 ▕寧寧▏
 ▕肥肥▏
  ̄ ̄ 

--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 218.162.74.125
愚者
2006-08-16 23:04:49 UTC
Permalink
※ 引述《asdsai (visa-sai)》之銘言:
: 小弟現在正在看一個範例
: 我看到這段後,看不出它程式的意思是什麼
: 如下
: A 為讀入一個串流資料(資料為二進位,假設有32 bit)
: B 是一個long型態
: long b = 0 ;
: for (int i = 0; i<4; i++) {
: b = (b << 8) | A.read();
: }
: 我重點是搞不懂為什麼 有這個符號 " | " (or ???)


也許a一次只讀8bit,或是只有8bit有資料

00000000 00000000 00000000 00000000
shift 8
00000000 00000000 00000000 00000000

i=0 , A.read is (10101111)
00000000 00000000 00000000 10101111
shift 8
00000000 00000000 10101111 00000000

i=1 , A.read is (11110000)
00000000 00000000 10101111 11110000
...............

--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 163.26.34.20
※ 編輯: qrtt1 來自: 163.26.34.20 (08/17 15:04)
visa-sai
2006-08-16 23:11:18 UTC
Permalink
※ 引述《qrtt1 (愚者)》之銘言:
: ※ 引述《asdsai (visa-sai)》之銘言:
: : 小弟現在正在看一個範例
: : 我看到這段後,看不出它程式的意思是什麼
: : 如下
: : A 為讀入一個串流資料(資料為二進位,假設有32 bit)
: : B 是一個long型態
: : long b = 0 ;
: : for (int i = 0; i<4; i++) {
: : b = (b << 8) | A.read();
: : }
: : 我重點是搞不懂為什麼 有這個符號 " | " (or ???)
: 也許a一次只讀8bit,或是只有8bit有資料
: 00000000 00000000 00000000 00000000
: shift 8
: 00000000 00000000 00000000 00000000
: i=0 , A.read is (10101111)
: 00000000 00000000 00000000 10101111
: shift 8
: 00000000 00000000 10101111 00000000
: i=1 , A.read is (11110000)
: 00000000 00000000 10101111 11110000
: ...............
謝謝回覆~但是為什麼是要這樣寫 b = (b << 8) | A.read();
那個 "|" 我看不太懂他的意義 ?? thx~~~~~~


--
▁▁
 ▕寧寧▏
 ▕肥肥▏
  ̄ ̄ 

--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 218.162.74.125
愚者
2006-08-16 23:22:51 UTC
Permalink
※ 引述《asdsai (visa-sai)》之銘言:
: 謝謝回覆~但是為什麼是要這樣寫 b = (b << 8) | A.read();
: 那個 "|" 我看不太懂他的意義 ?? thx~~~~~~

請做實驗,

a = 4;
b = 5;
c = 0;

印出下列算試的2進位結果

1. a
2. b
3. c
4. a | b
5. a | c
6. b | a
7. b | c



--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 163.26.34.20
visa-sai
2006-08-16 23:25:59 UTC
Permalink
※ 引述《qrtt1 (愚者)》之銘言:
: ※ 引述《asdsai (visa-sai)》之銘言:
: : 謝謝回覆~但是為什麼是要這樣寫 b = (b << 8) | A.read();
: : 那個 "|" 我看不太懂他的意義 ?? thx~~~~~~
: 請做實驗,
: a = 4;
: b = 5;
: c = 0;
: 印出下列算試的2進位結果
: 1. a
: 2. b
: 3. c
: 4. a | b
: 5. a | c
: 6. b | a
: 7. b | c

哈哈~ 我太笨了......我懂意思了 我以為是有特殊的意義

抱歉~自己檢討 感謝回答

--
▁▁
 ▕寧寧▏
 ▕肥肥▏
  ̄ ̄ 

--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 218.162.74.125
..
2006-08-16 23:27:42 UTC
Permalink
※ 引述《asdsai (visa-sai)》之銘言:
: ※ 引述《qrtt1 (愚者)》之銘言:
: : 也許a一次只讀8bit,或是只有8bit有資料
: : 00000000 00000000 00000000 00000000
: : shift 8
: : 00000000 00000000 00000000 00000000
: : i=0 , A.read is (10101111)
: : 00000000 00000000 00000000 10101111
: : shift 8
: : 00000000 00000000 10101111 00000000
: : i=1 , A.read is (11110000)
: : 00000000 00000000 10101111 11110000
: : ...............
: 謝謝回覆~但是為什麼是要這樣寫 b = (b << 8) | A.read();
: 那個 "|" 我看不太懂他的意義 ?? thx~~~~~~
這是位元比較運算子~
"|" 意思就是說,把兩個數字的位元作比較一碼對一碼,如果兩者其中一個是1
結果就是1,就像是or的意思,兩個只有一個是真就是true,簡單舉個例子
Ex: 8|2
1000 //8
0010 //2
1010 //這就是答案

--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 210.202.36.60
愚者
2006-08-16 23:35:21 UTC
Permalink
※ 引述《rockfuture (..)》之銘言:
: ※ 引述《asdsai (visa-sai)》之銘言:
: : 謝謝回覆~但是為什麼是要這樣寫 b = (b << 8) | A.read();
: : 那個 "|" 我看不太懂他的意義 ?? thx~~~~~~
: 這是位元比較運算子~
: "|" 意思就是說,把兩個數字的位元作比較一碼對一碼,如果兩者其中一個是1
: 結果就是1,就像是or的意思,兩個只有一個是真就是true,簡單舉個例子
: Ex: 8|2
: 1000 //8
: 0010 //2
: 1010 //這就是答案

都出好題目了。@@
會了就留給不會的人練習啊 orz

說到底,看答案和自己試一次的感覺深淺完全不同 (茶)
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 163.26.34.20
※ 編輯: qrtt1 來自: 163.26.34.20 (08/17 15:35)
继续阅读narkive:
Loading...