成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

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

開發 前端
本篇主要是理解計算機內存的本質,1字節=8位,1位=一個通電or沒通電的電子元件,通過不同的00101010表示不同的符號。

[[376392]]

 前言

Hey,大家好呀,我是碼農,星期八!

最近在學習關于逆向的一些玩意,發現逆向不得不說都是些玩底層的玩意。

在學習的過程中,發現了一個其實在正向開發中也用的很多的底層知識點,就是位和字節。

比如一個數字a究竟是怎么存在內存中的。

一段代碼

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

代碼

  1. package main 
  2.  
  3. import ( 
  4.     "fmt" 
  5.     "unsafe" 
  6.  
  7. func main() { 
  8.     //定義一個 字符a 
  9.     var a = 'a' 
  10.     //定義一個 正 整數3 
  11.     var b uint8 = 3 
  12.     var c uint8 = 98 
  13.     fmt.Printf("值:%c,十進制:%d,類型:%T,二進制:%b,大小%v字節\n", a, a, a, a, unsafe.Sizeof(a)) // 4個字節 
  14.     fmt.Printf("值%d,十進制:%d,類型:%T,二進制%b,大小%v字節\n", b, b, b, b, unsafe.Sizeof(b))   //一個字節 
  15.     fmt.Printf("值%c,十進制,%d,類型:%T,二進制%b,大小%v字節\n", c, c, c, c,unsafe.Sizeof(c))      //一個字節 

執行結果


有幾個問題

我a變量命名時字符a,為什么十進制是97,二進制是1100001?

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

位和字節

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

我們的程序,終究是跑在內存中的。

而我們的內存條,大概是這樣。


內存條的本質,本質就是一個個的電子元件,終究只有兩種狀態,通電(1),沒通電(0)。

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


字節

而一個字節,等于8位,1字節=8位 。

 

一位,就是一個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。


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

00000001


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

具體二進制對應的符號或者數字:https://baike.baidu.com/item/ASCII/309296?fromtitle=ASCII%E7%BC%96%E7%A0%81&fromid=3712529&fr=aladdin

通過查詢ASCII可知。

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


所以就和開頭對上咯!

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

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


目前的編碼方向

其實一個字節,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表示不同的符號。

經過這么多年的發展,utf-8已經很成熟,目前趨勢很穩定。

 

責任編輯:姜華 來源: Go語言進階學習
相關推薦

2021-01-06 09:47:51

內存Go語言

2011-07-27 21:53:12

2014-04-16 14:26:08

QCon2014

2021-01-15 16:37:29

編程語言JavaPython

2014-04-10 09:40:51

System 360計算機計算機系統

2021-07-20 10:26:53

源碼底層ArrayList

2019-09-10 12:58:03

電腦編程語言硬件

2020-10-11 20:46:41

計算機人工智能技術

2023-11-06 01:10:47

2015-09-15 10:52:52

2015-06-17 14:06:50

編程語言計算機編程語言

2018-01-15 14:20:57

編程語言學習方法

2013-09-11 09:59:00

2018-02-25 13:15:10

智能制造

2021-08-10 21:58:54

Go語言Flag庫

2020-03-20 10:40:04

云計算物聯網安全

2020-05-08 15:27:06

物聯網云計算網絡攻擊

2015-09-30 11:22:19

計算機大數據

2023-10-11 18:30:39

Web系統程序

2019-12-12 09:20:05

注銷計算機Windows 10
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 日韩免费av | 91tv在线观看| 五月花丁香婷婷 | 精品日韩| 国产精品日韩一区二区 | 欧美日韩不卡 | 精品久久久久香蕉网 | av黄色国产 | 亚洲美女一区 | 国产午夜在线 | 噜噜噜噜狠狠狠7777视频 | 免费一级黄色录像 | 欧美精品久久久 | 国产美女高潮 | 一级毛毛片 | 国产精品亚洲一区 | 久久久久久久久久毛片 | 亚洲视频区 | 欧美区日韩区 | k8久久久一区二区三区 | 精产国产伦理一二三区 | 黄网站在线观看 | 亚洲欧洲中文 | 日一区二区三区 | 亚洲国产精品一区二区第一页 | 国产日韩精品在线 | 免费黄篇 | 久久艹免费视频 | 欧美一区二区三区四区五区无卡码 | 国产成人综合在线 | 综合久久99 | 91精品国产乱码久久久久久久久 | 九色在线观看 | 欧美成人精品 | 午夜一区二区三区 | 久久久久久久久久久高潮一区二区 | 在线观看国产视频 | 青青久久av北条麻妃海外网 | 麻豆亚洲 | 91在线区 | 一区二区三区久久久 |