首頁 >後端開發 >Golang >從Go語言角度剖析關於計算機位的問題

從Go語言角度剖析關於計算機位的問題

Go语言进阶学习
Go语言进阶学习轉載
2023-07-21 11:52:271235瀏覽

一段程式碼

本次就以Go語言舉例,Go語言是類別C語言,一些底層還是很相近的!

程式碼

package main


import (
    "fmt"
    "unsafe"
)


func main() {
    //定义一个 字符a
    var a = 'a'
    //定义一个 正 整数3
    var b uint8 = 3
    var c uint8 = 98
    fmt.Printf("值:%c,十进制:%d,类型:%T,二进制:%b,大小%v字节\n", a, a, a, a, unsafe.Sizeof(a)) // 4个字节
    fmt.Printf("值%d,十进制:%d,类型:%T,二进制%b,大小%v字节\n", b, b, b, b, unsafe.Sizeof(b))   //一个字节
    fmt.Printf("值%c,十进制,%d,类型:%T,二进制%b,大小%v字节\n", c, c, c, c,unsafe.Sizeof(c))      //一个字节
}

執行結果

從Go語言角度剖析關於計算機位的問題

有幾個問題

我a變數命名時字元a,為什麼十進位是97,二進位是1100001

為什麼變數c命名是98,卻能輸出b?

位元和位元組

要像理解上述問題,還是要理解本質問題。

我們的程式,終究是跑在記憶體中的。

而我們的記憶體條,大概是這樣。

從Go語言角度剖析關於計算機位的問題

記憶體條的本質,本質就是一個個的##電子元件 #,終究只有兩種狀態,#通電(1),沒通電(0)

位元

一個電子元件,就是一個位元

從Go語言角度剖析關於計算機位的問題

位元組

#一個字節,等於8位元,1位元組=8位元

從Go語言角度剖析關於計算機位的問題

一位,就是一個0或1##,就是#二進位,非0即1

一個位元組,就是8個0或1,就像這樣,00000000,如果看到少於8個0或1,將前面都補成0,補夠8位元

通常情況下,語言一般只操作到位元組,很少操作到位。

為什麼a是97

雖然上述我們知道了,一個表示的就是一個通電沒通電電子元件

一個位元組表示的是#8個通電者沒有通電電子元件的組合。

但是這樣並沒有解決實際問題啊,我想存一個10,在加上一個20,進行加法計算,咋辦? ? ?

所以這時候,就要有一個什麼規定,哪個亮,或哪個不亮,就表示是什麼。

所以就有了ASCII#這個規範,這個規範的最小單位是位元組,也就是同時管理8個0或1

比如說,第一個位元組,就是前八位,如果說全部都是0,就表示的是十進制數字0。

8個二進位​​表示方式是00000000

從Go語言角度剖析關於計算機位的問題

又規定,從末尾開始計算,如果末尾亮了,其他7個沒亮,表示十進位1。

#

00000001

從Go語言角度剖析關於計算機位的問題

#等等等等,透過位元組組織位元,透過每8位元不同的組合,表示不同的符號或數字或字母等。

具體二進位對應的符號或數字:https://baike.baidu.com/item/ASCII/309296?fromtitle=ASCII編碼&fromid =3712529&fr=aladdin

透過查詢#ASCII可知。

字母a的二進位是0110 0001,十進位是#97 ,表示的符號是a

從Go語言角度剖析關於計算機位的問題

#

所以就跟開頭對上咯!

為什麼98能輸出b,還是因為#ASCII,因為98代表的就是字母b ,就是二進位0110 0010

只不過是輸出方式不一樣。

從Go語言角度剖析關於計算機位的問題

目前的編碼方向

#其實一個位元組,8位元,如果全部亮燈,就是11111111,他的十進位是255#,理論來說是可以支持255個符號的。

對於英文的國家應該是湊合了,一個字母8位元,一個位元組,存一個hello就是5個位元組,一共需要40位元就夠了。

但是現如今,計算機早已經成為一顆參天大樹,中國再用,小日本再用,棒子再用,各國的文字加起來早都不是255個那麼簡單了。

所以衍生出像中國的GBK等一些編碼,各種編碼都是基於 ASCII擴充的。

ASCII佔一個位元組,8位元,那我GBK不夠啊,幾萬個漢字呢,那我佔倆字節,16位,16個0或者1,應該湊合吧,再不行三個字節,24個0或1,三個字節十進制就已經到16777215#了,上千萬了,足夠保存各國的符號和文字了。

但是GBK#和其他編碼又不通用,所以現在又衍生出 utf-8等編碼收錄各國的編碼。

目前utf-8是一個最好的編碼,基本上已經支援所以電腦。


總結

#本篇主要是理解電腦記憶體的本質, 1位元組=8位元,#1位元=一個通電or沒通電的電子元件,透過不同的00101010#表示不同的符號。

#

以上是從Go語言角度剖析關於計算機位的問題的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:Go语言进阶学习。如有侵權,請聯絡admin@php.cn刪除