<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          從Go語言角度剖析關(guān)于計算機位的問題

          共 2287字,需瀏覽 5分鐘

           ·

          2021-01-17 15:29

          點擊上方“Go語言進(jìn)階學(xué)習(xí)”,進(jìn)行關(guān)注

          回復(fù)“Go語言”即可獲贈從入門到進(jìn)階共10本電子書

          但使龍城飛將在,不教胡馬度陰山。

          前言

          Hey,大家好呀,我是碼農(nóng),星期八!

          最近在學(xué)習(xí)關(guān)于逆向的一些玩意,發(fā)現(xiàn)逆向不得不說都是些玩底層的玩意。

          在學(xué)習(xí)的過程中,發(fā)現(xiàn)了一個其實在正向開發(fā)中也用的很多的底層知識點,就是字節(jié)

          比如一個數(shù)字a究竟是怎么存在內(nèi)存中的

          一段代碼

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

          代碼

          package main
          import ( "fmt" "unsafe")
          func main() { //定義一個 字符a var a = 'a' //定義一個 正 整數(shù)3 var b uint8 = 3 var c uint8 = 98 fmt.Printf("值:%c,十進(jìn)制:%d,類型:%T,二進(jìn)制:%b,大小%v字節(jié)\n", a, a, a, a, unsafe.Sizeof(a)) // 4個字節(jié) fmt.Printf("值%d,十進(jìn)制:%d,類型:%T,二進(jìn)制%b,大小%v字節(jié)\n", b, b, b, b, unsafe.Sizeof(b)) //一個字節(jié) fmt.Printf("值%c,十進(jìn)制,%d,類型:%T,二進(jìn)制%b,大小%v字節(jié)\n", c, c, c, c,unsafe.Sizeof(c)) //一個字節(jié)}

          執(zhí)行結(jié)果

          有幾個問題

          我a變量命名時字符a,為什么十進(jìn)制是97,二進(jìn)制是1100001

          為什么變量c命名是98,卻能輸出b?

          位和字節(jié)

          要像理解上述問題,還是要理解本質(zhì)問題。

          我們的程序,終究是跑在內(nèi)存中的。

          而我們的內(nèi)存條,大概是這樣。

          內(nèi)存條的本質(zhì),本質(zhì)就是一個個的電子元件,終究只有兩種狀態(tài),通電(1),沒通電(0)

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

          字節(jié)

          一個字節(jié),等于8位,1字節(jié)=8位

          一位,就是一個0或1,就是二進(jìn)制,非0即1

          一個字節(jié),就是8個0或1,就像這樣,00000000,如果看到不足8個0或1,將前面都補成0,補夠8位

          通常情況下,語言一般只操作到字節(jié),很少操作到位。

          為什么a是97

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

          一個字節(jié)表示的是8個通電者沒通電電子元件的組合。

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

          所以這時候,就要有一個什么規(guī)定,哪個亮,或者哪個不亮,就表示是什么。

          所以就有了ASCII這個規(guī)范,這個規(guī)范的最小單位是字節(jié),也就是同時管理8個0或1

          比如說,第一個字節(jié),就是前八位,如果說全部都是0,就表示的是十進(jìn)制數(shù)字0。

          8個二進(jìn)制表示方式是00000000

          又規(guī)定,從末尾開始計算,如果末尾亮了,其他7個沒亮,表示十進(jìn)制1。

          00000001

          等等等等,通過字節(jié)組織位,通過每8位不同的組合,表示不同的符號或者數(shù)字或者字母等。

          具體二進(jìn)制對應(yīng)的符號或者數(shù)字:https://baike.baidu.com/item/ASCII/309296?fromtitle=ASCII%E7%BC%96%E7%A0%81&fromid=3712529&fr=aladdin

          通過查詢ASCII可知。

          字母a的二進(jìn)制是0110 0001,十進(jìn)制是97,表示的符號是a

          所以就和開頭對上咯!

          為什么98能輸出b,還是因為ASCII,因為98代表的就是字母b,就是二進(jìn)制0110 0010

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

          目前的編碼方向

          其實一個字節(jié),8位,如果全部亮燈,就是11111111,他的十進(jìn)制是255,理論來說是可以支持255個符號的。

          對于英語的國家應(yīng)該是湊合了,一個字母8位,一個字節(jié),存一個hello就是5個字節(jié),一共需要40位就足夠了。

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

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

          ASCII占一個字節(jié),8位,那我GBK不夠啊,幾萬個漢字呢,那我占倆字節(jié),16位,16個0或者1,應(yīng)該湊合吧,再不行三個字節(jié),24個0或1,三個字節(jié)十進(jìn)制就已經(jīng)到16777215了,上千萬了,足夠保存各國的符號和文字了。

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

          目前utf-8是一個最好的編碼,基本已經(jīng)支持所以計算機。


          總結(jié)

          本篇主要是理解計算機內(nèi)存的本質(zhì),1字節(jié)=8位,1位=一個通電or沒通電的電子元件,通過不同的00101010表示不同的符號。

          經(jīng)過這么多年的發(fā)展,utf-8已經(jīng)很成熟,目前趨勢很穩(wěn)定。

          如果在操作理解中有任何問題,記得下面留言,我們看到會第一時間解決問題。

          越努力,越幸運。感謝你的觀看。

          -------------------?End?-------------------

          往期精彩文章推薦:

          歡迎大家點贊,留言,轉(zhuǎn)發(fā),轉(zhuǎn)載,感謝大家的相伴與支持

          想加入Go學(xué)習(xí)群請在后臺回復(fù)【入群

          萬水千山總是情,點個【在看】行不行

          瀏覽 22
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  亚洲黄色无码 | 人人婷人人操 | 四川人妻第二次3p | 欧洲成人在线 | 天天操天天操天天操天天操天天操 |