[爆卦]8位元16位元是什麼?優點缺點精華區懶人包

為什麼這篇8位元16位元鄉民發文收入到精華區:因為在8位元16位元這個討論話題中,有許多相關的文章在討論,這篇最有參考價值!作者kenin (風起雲湧)看板ask-why標題[請益] 為什麼電腦資料要用16進位時間Tue J...


我知道電腦本身所讀取的都0跟1
而在儲存資料時為何要用16進位而不用8進位或32進位
如果電腦儲存時改用8進位或32進位會有什麼差別

其實會問這個問題是對中文內碼可用的變化所連想的
現在一個中文字以16進位要用2BYTE=16bit=FFFF(16進位)=65536(10進位)個變化
如果用32進位同樣是2BYTE=20bit=VVVV(32進位-我不確定是不是V)=1048576(10進位)
1bit=一組0跟1的變化
若今天要把所有中文都對應一個內碼(包含簡繁體)
那目前2BYTE,65536個變化可能不夠(還是有其它的解決方案?)
而以數值來看,以四個bit為一組的16進位來記錄數值
一個BYTE可以記錄0~255個變化超過255就要再加1BYTE
而以32進位的話一個BYTE是用5個bit但可以記錄0~1023個變化
在0~255之間,16進位只要用8bit,而32進位要用10bit來記錄
若是256~1023之間,16進位要用16bit要記錄,但32進位只要用10bit來記錄
比16進位省空間
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 122.123.169.247
leoblack:16進位是否是指"有16個欄位可以紀錄1/0的資訊"?! 06/02 22:34
kenin:8進位=3個bit 16進位=4bit 32進位=5bit 06/02 22:39
yhliu:有的電腦系統是採用8進位的, 當然基礎仍是2進位. 06/02 22:45
sitos:糟... 我連問題都看不懂. 06/02 23:40
ot32em:應該跟組合語言的 BYTE(1byte), WORD(2byte), DWORD(4byte) 06/02 23:46
ot32em:怎麼樣也不會 DWORD會來個2.25byte 有點不太乾跪~ 06/02 23:47
HuangJC:一切都是人類的解釋,不過我們溝通時想要有共通的專有名詞 06/02 23:54
HuangJC:一般來說,5V為1,0V為0 ; 但事實上 5V為0,0V為1 亦無不可 06/02 23:55
HuangJC:因為開關明顯有兩態,所以我們發展了二進位數學,並且貫串 06/02 23:56
HuangJC:CPU 內部的運算系統;但事實上3進位也可以用,多加個 -5V XD 06/02 23:57
HuangJC:只是..用了三進位,你就獨門獨戶了..要怎麼和別人談? 06/02 23:57
xiaoa:要看是什麼"資料"吧.... 現在的系統不是多採用32bit嗎? 06/03 00:12
HuangJC:2'進位'和 32'位元' 是兩回事;我們討論'逢2進位'這事就好 06/03 00:16
xiaoa:JC說的不對吧...半導體做不到3進位, 只能從2bit降下來, 這樣 06/03 00:17
xiaoa:難怪 板主說問題都看不懂..... 06/03 00:17
HuangJC:32位元是指有32個2進位的數字;最後..3進位有用,看怎麼解讀 06/03 00:18
HuangJC:我們先講完課本上有的東西,因為那是想統一大家字眼的基礎 06/03 00:19
xiaoa:原PO說的16進位就是4bit. 他自己推文不是說了....... 06/03 00:20
HuangJC:他的說法是對的,只是同時混用'位元'和'進位',有人搞混了 06/03 00:26
HuangJC:所以把字眼再單純化,說電腦只懂二進位,會比較好談 06/03 00:27
xiaoa:原PO不是問,為何單位元不是3進. 是問,為何用4位元,不用3、5 06/03 00:30
xiaoa:3樓不是說了嗎...... 06/03 00:31
HuangJC:這還是解讀的問題,RAM 的定址法允許你做不同解讀 06/03 00:50
HuangJC:所以一般 RAM 的規格會說裏面儲存幾個 bit,你可以多樣解讀 06/03 00:51
haryewkun:樓主是不是指 FF FF 中的 “F”……? 06/03 00:57
haryewkun:也就是說,為什麼 FF FF 不叫做 17 77 77 ? 06/03 01:00
haryewkun:題外話,實在很懷念 64,c8,30 75, ff ff 這些數字……XD 06/03 01:16
HuangJC:用這些數字代表你在壓搾CPU,不過我覺得是自己被CPU壓搾.. 06/03 01:25
yzfr6:PC tools 06/03 10:36
※ 編輯: kenin 來自: 122.123.165.174 (06/03 11:29)
HuangJC:其實還有可變長度表示法,要不要看看?但會減慢運算速度呀.. 06/03 13:28

> -------------------------------------------------------------------------- <

作者: HuangJC (吹笛牧童) 看板: ask-why
標題: Re: [請益] 為什麼電腦資料要用16進位
時間: Wed Jun 3 00:45:19 2009


10010010 左邊叫做有八個位元的2進位

我們可以把它看成

92 兩個16進位的數字


這是解釋的問題,我溝通時會接受很寬的表達方式
如果有人要說電腦懂 16進位,我無所謂
不過如果要拿去考試拿不到分數,就別怪我了 XD

一般來說,我們說電腦基本上只懂二進位
這種說法其實和你能摸到的 UI 有關
一般來說從前從 basic 學起,看不到二進位,會以為電腦和人一樣懂十進位
why not? 中間的細節被包起來了

但電腦的發展史上,畢竟從組合語言開始把抽象電路邏輯抽出,變成程式
而且 basic 的轉換效率不高,當你要壓搾 CPU 速度時,就得開始了解二進位
組合語言裏一堆二進位指令;你鑽入細節愈多,能壓搾出的效率愈好

而寫程式時,自己從頭寫指令很慢,有別人的函式庫會快很多
組裝電腦也一樣,一堆 IC 都是二進位,你最好也再接一顆二進位上去
和別人不同,你的系統會很難過,很難發展

3進位存不存在呢?有..
但它不是中央系統,大概在週邊
它也沒有整套的數學運算及相關指令

所以我們能不能說電腦懂3進位呢?不行
不過週邊有稍微用一點啦

通常我們不說3進位,可能說3態
但是考慮兩個3進位數字可表達的狀態,可以看到有趣的東西

00
01
02
10
11
12
20
21
22

以上就是三進位的九種變化,所謂三進位是逢三進位
2的三次方有八種變化,所以三進位的兩個數字可以完全涵蓋2進位的3個數字

00 000
01 001
02 010
10 011
11 100
12 101
20 110
21 111
22 保留

這多的一個保留很好用,可以當做控制,例外等等;或者安插同位元檢測
在通訊上真的有這樣用

那我要不要把三進位做進 CPU 裏呢?
免了吧,大家發展二進位那麼久了,沒人和你一樣的事會很累..

半導體做不到三種變化?
這你可不能這樣說

我們知道,電腦的電源供應器上供應幾種電壓
+5,-5,+12,-12,以及接地(0V)

所以用 +5,0,-5 來表達 0,1,2 是很容易的
IC 一定做得出來

剩下的應該就是什麼成本效益的問題了
我為什麼要這樣做,成本會不會反而拉高等等

但在週邊,在通訊,考量的不一樣
那就真的有這樣做

;;

再來我們談到儲存
最前面一段,我說'電腦懂2進位或16進位的講法,我無所謂'
但我得擔心考試時老師給不給分

一般我們說一個 64K 定址的小系統 (比如從前的八位元電腦)
這意思可能是我的定址能力為

64K * 1 Byte <== 這其實是 CPU 觀點

就 RAM 來說,經常規格不是用 byte 來開,而是用 bit
所以你說 64K*8= 512K bit 也可以

只要你供應我一顆 512K bit 的 RAM,我就夠用了
而這 512K bit 如果被連接到一台 16位元電腦,會發生什麼事?
所謂 16位元是指我定址一次,希望取回 16位元

所以 512K/16= 32K

也就是說這顆 RAM 足夠讓 CPU 定址前 32K 的16位元空間

至於這 RAM 怎麼安排接腳讓一次 16個資料位元出現,那是另一回事了
有的 RAM 就是安排數種模式,讓定址法可以多樣化
所以 RAM 的規格真的是開 bit 為主
你愛怎麼解釋電腦用幾進位來儲存資料..就看你怎麼解釋,講不講得通
不過我還是習慣說電腦用二進位儲存資料,一次存幾位元
而不會說用幾進位

這裏 '位元' 和 '進位' 混用,會頭痛的..

所以得看原 PO 要不要修正字眼重問一次

--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.59.179.152
※ 編輯: HuangJC 來自: 61.59.179.152 (06/03 01:04)
sitos:有些觀念是錯的,但離題太多,不知從何講起了。 06/03 02:23
HuangJC:原 PO 沒修正字眼前,題目本身就有問題呀.. 06/03 02:35
HuangJC:我可以再講併排兩個 RAM 的系統來修正得更像實務,相比之下 06/03 02:39
HuangJC:我上面講的就是錯的;但事實上說上面的講法錯是見過的太少 06/03 02:39
HuangJC:我們所謂的電腦,幾乎被限縮在INTEL 了,才以為只有這些答案 06/03 02:40
HuangJC:如果這樣,又如何解釋一些用11位元定址的電腦呢? XD 06/03 02:41
HuangJC:(這是從設計 CPU 的書上看來的,不是沒有) 06/03 02:41
sitos:那就算了,某個角度來講,我對這問題沒太多興趣。 06/03 02:43
HuangJC:原PO的問題是'為什麼不用',不過其實有用 06/03 04:08
HuangJC:那好像該問'為什麼我沒看到' 06/03 04:09

> -------------------------------------------------------------------------- <

作者: xiaoa (沒有靈魂的人) 看板: ask-why
標題: Re: [請益] 為什麼電腦資料要用16進位
時間: Wed Jun 3 01:12:04 2009

※ 引述《kenin (風起雲湧)》之銘言:
: 標題: [請益] 為什麼電腦資料要用16進位
: 時間: Tue Jun 2 22:30:34 2009
:
: 我知道電腦本身所讀取的都0跟1
: 而在儲存資料時為何要用16進位而不用8進位或32進位
: 如果電腦儲存時改用8進位或32進位會有什麼差別
:
:
: --
: ※ 發信站: 批踢踢實業坊(ptt.cc)
: ◆ From: 122.123.169.247
: → leoblack:16進位是否是指"有16個欄位可以紀錄1/0的資訊"?! 06/02 22:34 : → kenin:8進位=3個bit 16進位=4bit 32進位=5bit 06/02 22:39 : → yhliu:有的電腦系統是採用8進位的, 當然基礎仍是2進位. 06/02 22:45 : → sitos:糟... 我連問題都看不懂. 06/02 23:40 : 推 ot32em:應該跟組合語言的 BYTE(1byte), WORD(2byte), DWORD(4byte) 06/02 23:46 : → ot32em:怎麼樣也不會 DWORD會來個2.25byte 有點不太乾跪~ 06/02 23:47 : 推 HuangJC:一切都是人類的解釋,不過我們溝通時想要有共通的專有名詞 06/02 23:54 : → HuangJC:一般來說,5V為1,0V為0 ; 但事實上 5V為0,0V為1 亦無不可 06/02 23:55 : → HuangJC:因為開關明顯有兩態,所以我們發展了二進位數學,並且貫串 06/02 23:56 : → HuangJC:CPU 內部的運算系統;但事實上3進位也可以用,多加個 -5V XD 06/02 23:57 : → HuangJC:只是..用了三進位,你就獨門獨戶了..要怎麼和別人談? 06/02 23:57 : → xiaoa:要看是什麼"資料"吧.... 現在的系統不是多採用32bit嗎? 06/03 00:12 : 推 HuangJC:2'進位'和 32'位元' 是兩回事;我們討論'逢2進位'這事就好 06/03 00:16 : → xiaoa:JC說的不對吧...半導體做不到3進位, 只能從2bit降下來, 這樣 06/03 00:17 : → xiaoa:難怪 板主說問題都看不懂..... 06/03 00:17 : → HuangJC:32位元是指有32個2進位的數字;最後..3進位有用,看怎麼解讀 06/03 00:18 : → HuangJC:我們先講完課本上有的東西,因為那是想統一大家字眼的基礎 06/03 00:19 : → xiaoa:原PO說的16進位就是4bit. 他自己推文不是說了....... 06/03 00:20 : 推 HuangJC:他的說法是對的,只是同時混用'位元'和'進位',有人搞混了 06/03 00:26 : → HuangJC:所以把字眼再單純化,說電腦只懂二進位,會比較好談 06/03 00:27 : → xiaoa:原PO不是問,為何單位元不是3進. 是問,為何用4位元,不用3、5 06/03 00:30 : → xiaoa:3樓不是說了嗎...... 06/03 00:31
我不能很精準的回答原PO的問題
而我只是略懂, 所以有錯勿怪

--回應JC大--離題離很大--
目前, 電腦所用的運算單元是由半導體電路組成的
對電路來說, 電流是類比訊號, 要多少進位都不是問題
但基本上, 我們為了要運算, 必須在電路上增進"開關"
這些開關, 便是半導體

每一個半導體都能很直接的代表 開 和 關, 即 一個二進位的一位數字
試問半導體是不是可以表示 三進位?
假設今天有 0V, 5V 10V, 半導體 在5V時導通
一個半導體無法分辨 5V 和 10V的差別. 也許電流大一點, 但它就是無法分辨
這時, 如果我們使用 二個半導體 + 適當的電路設計, 我們就能分辨 0,5,10的差別
所以, 接論是:
半導體能夠表示三進位

但是這裡有個漏洞
我們使用了二個半導體
二個半導體實際上能代表四進位
我們卻只用了三個數字, 那其不是浪費??

這就是為甚麼電腦多是以二進位做為基礎,4進位,8進位,16進位的運算
如果電子儀器的設計, 其運算單元並非半導體, 那它不是2進位並不奇怪
希望這樣有回答到 JC大

--原PO的問題--
在早時候, 半導體晶元還很大
運算時要盡量節省, 所以要用較少的 bit來代表一個"字元"
(PS: 在硬體上會預留空間給字元, 也就是資料為01, 4bit硬體只能以 0001 表示)
但是, 字元有必要為人所容易理解的介面(要不然誰看得懂101010110是啥鬼)
例如早期的文字是使用 8bit(更早期沒有文字就只用4bit囉)
那時候根本只有美國做為主流,在開發、應用電腦, 8bit就足夠了
後來多國語言加入 8bit逐漸被淘汰

這其中還牽涉到轉換
機械語言 <-> 低階語言 <-> 高階語言
機械語言就是 10101
高階語言是各種程式編寫碼
低階語言是...不知道怎麼減略說明 http://0rz.tw/323hv

不知道是那一個部分在使用 4bit, 或者說現在還在使用
我只知道現在集成電路技術、高階語言都很發達, 很闊氣的使用32bit、64bit
Orz

這問題常常到處有人討論, 建議原PO到處爬爬文看看 (我自己也沒爬文....逃~)

--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.112.244.42
HuangJC:你也說了,不是做不出來,是成本考量;而成本考量一直在變 06/03 01:16
HuangJC:我說的是真的,不過最後總會出現主流啦;沒看過規格大戰嗎? 06/03 01:16
HuangJC:如果成本考量是很單一的答案,就不會有規格大戰了 06/03 01:17
你要看做成本也可以. 我覺得這只是有沒有充分利用的問題
這樣看就懂了
10進位 2進位 2進位模擬3進位
0 0 00 -> 0
1 1 01 -> 1
2 10 10 -> 2
3 11 100 -> 10
4 100 101 -> 11
9 1001 10000 -> 100
10 1010 10001 -> 101

3進位每個byte是由二個2進位位元組成
這種轉換,在數字越來越大時,
如10進位的10, 用 2進位模擬3進位的結果,
> 10進位 2進位 2進位模擬3進位
> 10 1010 10001 -> 101
^^^^^
如果10001,當成真正的2進位,看在10進位中是17
在擬3進位中卻只能代表10, 足足有 7/17的無意義位元....
※ 編輯: xiaoa 來自: 140.112.244.42 (06/03 01:41)
HuangJC:多位元CPU到後來,用幾顆電晶體是一種成本;但有幾根腳也是 06/03 01:27
HuangJC:當聯外腳位不夠,就可能動腦筋想到奇奇怪怪的組合上去 06/03 01:28
HuangJC:不過為了和傳統理論結合,一般還是用二進位*多位元解讀 06/03 01:30
HuangJC:所謂'電腦用x進位'這樣的字眼是很麻煩的,業者會輕輕帶過 06/03 01:31
HuangJC:不會..會直接開發三態電晶體線路,沒那麼多浪費 06/03 01:45
xiaoa:你把那些東西拿來利用,它就不再是3進位了, 是2進位... 了不? 06/03 01:47
HuangJC:你去看我上一篇修文吧,這個是有在用的,只差我背不出IC型號 06/03 01:48
xiaoa:因為你的系統始終是基於 2進位的基礎.... 06/03 01:48
HuangJC:它不是浪費,倒是種創意;但未接觸該領域前我們不提,因為其 06/03 01:49
HuangJC:他東西已經讀得快爆肝了,不會一次都和你提 06/03 01:50
HuangJC:這裏有編碼的啦..不是基於2進位;擔心編碼拖慢速度就好 06/03 01:50
HuangJC:所以把速度當成一種成本,再混進去,一路規格大戰下來~ 06/03 01:51
HuangJC:應該說,二進化存在你的電腦螢幕上,方便你解讀;但你如果拿 06/03 01:52
HuangJC:一根探針插進電路想讀到二進位..我怕現在電腦不單純了 06/03 01:53
HuangJC:所以二進位?那都是在螢幕上,方便你想像的 06/03 01:53
你想太多了....一切都半導體惹的禍
現在想要開發量子電腦就是希望破除半導體這樣的拘限
量子電腦強並不是因為量子很小, 而是因為量子運算單元可以擁有 0 1 以外的態
※ 編輯: xiaoa 來自: 140.112.244.42 (06/03 02:47)
※ 編輯: xiaoa 來自: 140.112.244.42 (06/03 02:51)
HuangJC:這句話拷貝到了字眼,沒拷貝到精神.. 06/03 02:50
HuangJC:要擁有 0 1 以外的態,不必到量子,我們就辦到了 06/03 02:50
HuangJC:如果我今天給你的挑戰是'把 CPU 聯外接腳減半',那就有趣了 06/03 02:51
HuangJC:一根接腳只能代表 0 或 1? 不..要代表四種電壓我也想試試 06/03 02:51
HuangJC:但回到抽象概念,四種電壓你可以想像成2bit,所以這樣想就好 06/03 02:52
xiaoa:有CPU是半導體以外的東西做的,請告訴我,謝謝 06/03 02:52
HuangJC:我是說,用半導體就做到了;所以何必改材料呢? 06/03 02:53
xiaoa:如果你是增加運算單元的體積, 那跟增加運算單元是一樣的.... 06/03 02:54
xiaoa:去寫論文吧. 我等你 ~>.^ 06/03 02:55
HuangJC:接腳空間愈來愈不夠用,而CPU內部卻愈做愈密;新的成本問題 06/03 02:56
HuangJC:你看懂我上一句就夠了,幹麻有論文.. 06/03 02:56
你只告訴我, 半導體除了體現"通電"和"不通電"以外, 還有什麼第3態就夠了
真的也不必寫什麼論文
※ 編輯: xiaoa 來自: 140.112.244.42 (06/03 02:59)
HuangJC:接腳不夠的一個方法,是重覆使用接腳(分時態),但要加快時脈 06/03 02:58
HuangJC:而加快時脈也是一種成本;反正就一直競爭啦~ 06/03 02:58
HuangJC:但不變的是,中央單元像一堆寫好的副程式,已經有很多成品 06/03 02:59
時脈數再怎麼增加、改變,每一次的運算仍然是2進位的半導體在做......
※ 編輯: xiaoa 來自: 140.112.244.42 (06/03 03:01)
HuangJC:(硬體描述語言)所以很少人會自找麻煩,寫不一樣的東西 06/03 03:00
HuangJC:我剛不是說了,-5,0,+5 這三種電壓就可以三態了嗎? 06/03 03:01
我上面說過了, 請問你的第三態是什麼?
半通電? 超通電? 非常不通電?
※ 編輯: xiaoa 來自: 140.112.244.42 (06/03 03:03)
HuangJC:我們不會讓這想法入侵到中央單元,你寫組語也開心的當2進位 06/03 03:02
HuangJC:就好;但是週邊,或晶片間,那就各顯神通了 06/03 03:03
pureblue:我認為Xia不必再回,這非本行的容易聚焦錯誤。 06/03 09:32
pureblue:Xia你講的夠清楚了,真想知道,白色算盤本唸通就行。 06/03 09:33
freef1y3:現在的CPU都是用二進位為主的邏輯閘兜出來的吧 06/03 09:54
freef1y3:如果要用三進位可能整個邏輯系統都要重新發展.. 06/03 09:55
HuangJC:對,是成本的問題;但在特殊用途或非主流時還是看得到 06/03 10:13
HuangJC:目前就算內部不是這樣做,在抽出介面時還是會做成這樣子 06/03 10:14
HuangJC:到最後我們無法以 bus 寬度來當標準,可能是以 ALU 當標準 06/03 10:15
HuangJC:那 ALU 是以二進位運算嗎?(比如加法,是一個一個位元疊加?) 06/03 10:16
HuangJC:也不是,事實上多位元疊加用查表比較快;但你畢竟可以用位元 06/03 10:17
HuangJC:疊加來理解它.那我們又以ALU能控制的最小單元來定義嗎? 06/03 10:17
HuangJC:如果我們用 CPU 邊界接腳來定義,那怎麼又對混合型 IC 視而 06/03 10:19
HuangJC:不見?我用過18條位址線的 IC,一道指令就發出 SIN 波 06/03 10:20
HuangJC:這個是專用用途 DSP,數位及類比 IC 的混合 06/03 10:21
HuangJC:更妙的是現在燒錄 IC 大行其道,可以取得授權自己燒.. 06/03 10:22

> -------------------------------------------------------------------------- <

作者: HuangJC (吹笛牧童) 看板: ask-why
標題: Re: [請益] 為什麼電腦資料要用16進位
時間: Wed Jun 3 02:33:12 2009


其實電腦系統並不是一切都按 2的 N 次方成長的
只是規格大戰的結果,看誰獲勝

舉例來說,從前的8位元 CPU 有 16條位址線
進到 16 位元電腦時,有 20 條位址線

為什麼不用 32 條?

事實上 32 條也設計得出來
但人家設計 20 條並且行銷成功,那..就流行啦~

一個 byte 有 8個 bit,曾不曾惹過麻煩?
有沒有聽過有些系統只認得七位元?

為什麼這麼怪咧...
可能是夠用就好,可能是保留一個當同位元檢測
也許有人說保留同位元檢測的話,其實骨子裏是八位元,因為那個同位位元你又不能不儲存
那...真正的八位元系統再保留同位位元
你要不要叫它九位元系統? XD

事實上現在沒那麼麻煩,同位位元不儲存了
所以當年有把 RAM 上面偷拔一顆 IC 而 user 不會發現的故事
而這種內部細節 user 不必懂
你就當那是 八位元,就可以學得很好

因此,問題其實應該限縮為 '我為什麼感覺電腦儲存 16 位元'
注意到,是'感覺'
事實上電腦怎麼儲存,已經不見得真的是那樣了


在一個 byte 之前,其實四位元一組是流行過的
因為在16進位到10進位間,還流行過一個 BCD 編碼
http://zh.wikipedia.org/wiki/二進碼十進數
BCD 編碼一次就要動用四位元,三位元還不夠用
用一個16進位來模擬10進位,它有極大的浪費

所以對於儲存方式的浪費,我們很在乎嗎?我不認為
而是整個競爭的結果,最後有了暫時的統一

而兩個四位元,也就是八位元了
這次整個業界還算統一,用乘2的方法在發展
但如果你扣掉同位位元,看到七位元系統的存在
老實說,它是帶來些麻煩

不過它真的存在


對學組合語言的人來說,也許他認為,能被我用 CPU 定址到的才叫'電腦的認知'
那麼(或許)並沒有七位元資料匯流排的電腦
不過那並不是設計不出來
可能只是規格大戰的結果罷了

而對於一些撰寫多單元系統的人來說,他所看到的不只 CPU 的認知
他所要運用的機械語言也不只 CPU 的那一種
我們會用盡方法去想像,描述
不過在討論之前會先統一一下字眼
主 CPU 一定是用八(的倍數)位元系統嗎?
我..不確定
不過會盡量朝這方向設計就是了


--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.59.179.152
xiaoa:多少bit 和 多少進位 是不同的喔. 你搞混了吧..... 06/03 02:43
HuangJC:就是怕搞混,所以我說統一講電腦認得2進位就好 06/03 02:44
HuangJC:我這次的文,只有 BCD 那段用到16進位. 06/03 02:45
HuangJC:而且,不用二進位的話,其實不能用 bit 這個字眼 06/03 02:46
HuangJC:前面我舉週邊用的三進位,這時它不能用 bit 喔~ 06/03 02:46
xiaoa:難怪PrinceBamboo說你扯...... Orz 06/03 03:05
HuangJC:我說了,我們先討論課本上的就好;但原PO字眼混用呀.. 06/03 03:22
HuangJC:你放心,三進位我是在講義上看到的,不是我發明的 06/03 03:24
HuangJC:事實上,為何不用八進位,為了 BCD 編碼是個很好的答案 06/03 03:28

> -------------------------------------------------------------------------- <

作者: HuangJC (吹笛牧童) 看板: ask-why
標題: Re: [請益] 為什麼電腦資料要用16進位
時間: Wed Jun 3 03:21:44 2009


: 你只告訴我, 半導體除了體現"通電"和"不通電"以外, 還有什麼第3態就夠了
: 真的也不必寫什麼論文

: → HuangJC:我剛不是說了,-5,0,+5 這三種電壓就可以三態了嗎? 06/03 03:01 : 我上面說過了, 請問你的第三態是什麼?
: 半通電? 超通電? 非常不通電?

*----- B pull to -5V
/
A--+--* *----- C pull to 0V
|
| *----- D pull to +5V
|
+----------- output

(三選一連接,不可同時連接兩點以上造成短路)

以上電路就可以了
的確只有導通和不導通
但是 A 有 B,C,D 三個導通選擇,就可以得到三種電壓

很浪費?你可以想像成用三個導不導通來做這一件事
但如果我想省接腳時,我還是用啊

另外,程式都八位元,資料都八位元,一定嗎?

01010101 01010100 <= 第一個八位元是程式,第二個八位元是資料

但也可以是這樣

01010101010 10100 <= 前11個元位是程式,後五位元是資料

但這時我們會自找麻煩把書編得很難讀嗎?不會
注意看到,我上面只有抽象講法的不同,但十六進位都是 '55 54'
所以我可以想法子把書編成 55 是一道指令,
後面的 54 有五位元的資料,加上高達八種小變化

總之在抽象的理解上,彈性很大
有沒有這種5位元的資料呢?有..

所以我說中央單元都想像成2進位,想像成八位元
那是讓你想像而已..

最重要的是,你感覺到了什麼,然後才能學得好
但如果你想插一根探針就讀到這些資料
如果有編碼,那會有相當的難度

對於 basic 學生,二進位不一定要懂,它很人性化,用十進位
對於寫網頁的人,他整天看 UTF-8,理解到的可能是可變長度編碼

我們以為這個問題是在討論中央處理單元所看到的...
但它也可能只用5位元當資料呀 :)

但你一切都只用二進位理解,可以理解到最多沒錯
即使我舉的5位元,它還是二進位的

--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.59.179.152
HuangJC:對了,這裏就有五位元的儲存了,誰說沒有.. ;如果硬要這樣問 06/03 03:31

一般五位元的儲存,目前還是會用八位元來做
前面舉的例中,前三位元並沒浪費
工程師會想法子擠一些排列組合來用

但如果真要浪費(而且例子很多)
那就浪費吧~

data sheet 會這樣寫

xxxBBBBB <== 前3個 bit don't care,不管填什麼,結果都是一樣的


所以問題不是發生在 CPU 為何只取用5位元
而是'為何我只能把資料,放進八位元的 RAM 裏'

答案就是便宜..大家都在賣八位元,八位元就有現貨;浪費三位元就算了

而事實上很計較 RAM 時,就有很計較的做法
比如存進單位元的串流裏,自己去切割,每五位元當一組資料
犧牲的是速度,但不是辦不到;怎麼辦到的,這裏就離題了
但有沒有 CPU 取用 5位元資料? 有,當然有
所以也當然有只儲存五位元資料(原 PO 所謂的 32進位?)

※ 編輯: HuangJC 來自: 61.59.179.152 (06/03 03:40)
pureblue:你根本錯到亂七八糟,這種電路圖只有三種結果,每種結果 06/03 09:34
pureblue:只有兩種狀態,有電壓或沒有電壓,三種電壓哪來的? 06/03 09:34
HuangJC:我如果教到你會就真叫離題了,我只說'有沒有' 好不好? 06/03 10:11
HuangJC:這張圖簡略了很多地方,但我以為別人看得懂;因為不想講太多 06/03 10:12
※ 編輯: HuangJC 來自: 61.219.65.16 (06/03 10:26)
xiaoa:很好啊. 你都忘記二極管是單向通電的了..... 06/03 12:57

你一直以為硬體工程師辦不到?
稍微要試,你就說可以寫論文?

那你怎麼不翻一下 AD/DA 線路,這些概念又有多難?
還有,IDE 排線到達傳輸瓶頸時,是怎麼突破的?
後來為何又回到串列傳輸?
規格之戰,鹿死誰手,我們真的比別人英明?

HuangJC:單向通電又怎樣? 06/03 13:04

半導體被用成只有導通和截止,那是運用在飽合區
事實上你前面說的沒錯,半導體就是可以半導,全導
0.1 0.2 0.3 0.4 這種灰階都能用得出來
類比電腦,運算放大器,你家的音響發出的 SIN 波
那全是半導體參與的

運用在飽合區是為了取得最佳的雜訊免疫,但不是只有飽合區好用
ALU 全用二進位是為了和所有的舊包袱相容,但不是只設計得出二進位

所以當雜訊免疫技術提高時,能不能在一個 digit 內多放一些資訊?
當然可以..

你後文說,誰家光碟用半導體做了
那要不要回頭反問,誰說半導體只能用在 0 和 1?
我舉了光儲存,其他磁儲存,電儲存,有沒有人做過不同的設計?
更有甚者,有訊號就是1,沒訊號就是0?
那又怎麼解釋有些系統在儲存連續0時,是混著1在儲存?

那我們回頭只看 ALU 好了,它是二進位運算嗎?

如果一位元加法花一單位時間,那8位元要8單位,32位元要32單位
為什麼不管我加幾位元都一樣快呢?
...誰真的和你實作加法器呀,加法器學會後,變成方便講解的邏輯了
現在都用查表,加數及被加數進入,結果就出來了
電腦是能心算 N 位元加法的聰明小孩 :P

那我要不要做個三進位的 ALU?
能..不划算
但我其實不清楚是不是永遠不划算

比方光碟片上的光儲存如果是三態,也許我就建個三進位的 IC 來輔助
不過這不是電腦的中央 CPU,週邊工程師也不會讓你操心這些了

每個人,都會就他看到的抽象概念去理解及發問
事實上是這樣
※ 編輯: HuangJC 來自: 61.219.65.16 (06/03 18:54)

> -------------------------------------------------------------------------- <

作者: pureblue ( 生活失序) 看板: ask-why
標題: Re: [請益] 為什麼電腦資料要用16進位
時間: Wed Jun 3 10:30:40 2009

※ 引述《kenin (風起雲湧)》之銘言:
: 我知道電腦本身所讀取的都0跟1
: 而在儲存資料時為何要用16進位而不用8進位或32進位
: 如果電腦儲存時改用8進位或32進位會有什麼差別


這問題無法於短短文章內一概而論,問題之解答在於
各進位法之"取捨",每種進位法各有優缺點,那麼該
如何取捨?

差別肯定是有,例如10進位數字79,用2進位表示為
01001111,用8進位表示為117,用16進位表示為4F,
而我"懶得用"32進位法表示,"因為"要使用太多字符
表示10進位的10~31。

這個"我懶得用"就是差別所在:

『一個位元組只需一個32進位數字來記,用兩個16進位數字
來記,用三個8進位數字來記』



『16進位法要使用A~F等六個字符,32進位法要用22個字符』



『8進位、16進位與32進位都可用2進位快速轉換,其中16進
位只要熟練點還可以心算』

幾相權衡之下,身為工程師,我認為採用16進位法可以
得到很好的折衷。

而早期的UNIX系統因檔案權限設計之因素會採用8進位法
,這是因其優缺點於使用之情境幾經考量而決定之故。
所以這種取捨問題,其實可以拉長拉遠成計算機發展史來
看,若忽略歷史發展因素,會有無法切中問題核心之感。

至於為何使用2進位法,無須贅述。

另,這問題與各大文化發展中所使用之12進位法、16進
位法、60進位法之爭並無干係。




--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 211.23.53.216
flygalaxy:我可不可以偷偷推一下這篇? 06/04 20:53
flygalaxy:感覺眾大大吵了半天~只有這位有回答到重點~而且簡單易懂 06/04 20:53

> -------------------------------------------------------------------------- <

作者: HuangJC (吹笛牧童) 看板: ask-why
標題: Re: [請益] 為什麼電腦資料要用16進位
時間: Wed Jun 3 12:18:46 2009

※ 引述《kenin (風起雲湧)》之銘言:
: 我知道電腦本身所讀取的都0跟1
: 而在儲存資料時為何要用16進位而不用8進位或32進位
: 如果電腦儲存時改用8進位或32進位會有什麼差別

: 其實會問這個問題是對中文內碼可用的變化所連想的

有改文了,其實這段很重要 :)
可以看出你的觀點及用字,才知道真正的問題

: 現在一個中文字以16進位要用2BYTE=16bit=FFFF(16進位)=65536(10進位)個變化
: 如果用32進位同樣是2BYTE=20bit=VVVV(32進位-我不確定是不是V)=1048576(10進位)

這裏還是有用字述題的問題,我可以猜,但還是會猜錯
基本上 bit,byte,已經是二進位專用語了
2byte 永遠是 16bit

建議你改用 digit 這個字眼來表達幾個'數字元'

32進位用 2digit... 你也許是想說這個吧!

: 1bit=一組0跟1的變化
: 若今天要把所有中文都對應一個內碼(包含簡繁體)
: 那目前2BYTE,65536個變化可能不夠(還是有其它的解決方案?)
: 而以數值來看,以四個bit為一組的16進位來記錄數值
: 一個BYTE可以記錄0~255個變化超過255就要再加1BYTE
: 而以32進位的話一個BYTE是用5個bit但可以記錄0~1023個變化
: 在0~255之間,16進位只要用8bit,而32進位要用10bit來記錄
: 若是256~1023之間,16進位要用16bit要記錄,但32進位只要用10bit來記錄
: 比16進位省空間

以上全部要更正字眼再來討論
省空間與否就難說了

前面我討論過三進位,我有強調過它的概念沒進入中央系統,沒進入 ALU
但不代表它沒在週邊使用;這一切看成本

一張光碟片上面的資料,可以用雷射打上去儲存
光碟片就是週邊了,它一定只儲存 0 或 1 嗎?那..就不一定了
我們現在談很多倍存技術就這樣來的
如果我一個光點可以表達上百種值,而且分列清楚,那當然得這樣幹
最後我會設計一顆讀取 DVD 的 IC,那顆 IC 在傳出資料時是二進位
不代表光點真的用二進位儲存;這一切是看成本架構

但如果是一定只存 0 或 1 時
不管你的中文內碼用幾進位,其實沒有意義
因為我會重編碼成二進位才儲存;那沒省到空間


在 BYTE(八位元) 之下有 NIBBLE(四位元)
一個 NIBBLE 就可以代表一個 BCD digit,用來表達十進位很方便

4*2=8,好像我們嫌不夠用就要發展八位元
而買得到的 RAM 組成八位元 BANK 也很方便,別自找麻煩
電腦的主流也傾向一次計算八位元了

不管 16,32,64位元的電腦,它都還保留有八位元的暫存器

這樣能說電腦以 2^8=256進位在運算嗎?
我們還是說它用二進位,八位元 這樣的字眼好了

而且你觀點的改變其實並無法省到空間
我們可以接著談 RAM 的定址法,我原本以為那叫扯遠
但看來那快進入核心問題了

是有省到 digit,而 digit 太長時,打程式會很長
有這個差別而已

一切都在你人為的解釋裏

--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.219.65.16
※ 編輯: HuangJC 來自: 61.219.65.16 (06/03 12:26)
xiaoa:幹嘛一直談到2+n進位? 看似是有點專業, 但又有點業餘..... 06/03 12:48
xiaoa:誰家的光碟用半導體原理做了.....? 06/03 12:49
HuangJC:他正在談'省空間',你還是從空間去看吧.. 06/03 13:02
HuangJC:另外我覺得他在講的byte是 Address,定址空間,這東西可以省 06/03 17:12
HuangJC:其實這些算是系統工程師的工作,幾經辯論,歷史,經驗而成 06/03 17:50
HuangJC:如果我們覺得很簡單,想太多,那是不是把自己當得太厲害了點 06/03 17:50
HuangJC:就目前結論的了解當然很容易;但當年決策者不見得看得簡單 06/03 17:51
HuangJC:原 PO 提出的,是一個'在有框架前的創新',那為何要拿框架 06/03 17:52
HuangJC:來綁死,限定唯一的答案? 06/03 17:52
wild68:學識不佳不論對錯,很久沒看到能如此侃侃而談 06/04 09:03
wild68:又沒有架子,沒有傲口氣的人了,之前看某人的文章 06/04 09:04
wild68:雖然他很熱心,不過心裡老是想說他口氣有必要這樣嗎 06/04 09:04

你可能也想看看

搜尋相關網站