數據類型中char是什麼型?本文針對x86架構體系而言----------------------------------------,下面我們就來說一說關于數據類型中char是什麼型?我們一起去了解并探讨一下這個問題吧!
本文針對x86架構體系而言
----------------------------------------
我們知道在c語言中,char類型是8位二進制的有符号類型,最高位為符号位,剩下的7位表示數值,而7位能表示的最大值為127,所以第一直覺是char類型的範圍應該是-127~ 127。但如果是-127~ 127的話,那0就有兩種表示了:
假如用源碼表示0的話,二進制就是:0000 0000 和1000 0000, 也就是有正零,負零,有點詫異,還有點浪費空間...
那能不能用其中的一個0來表示-128呢?當然可以!而且必須用二進制1000 0000來表示(0000 0000就表示0了,天時地利人和)
這就有了-128的一席之地了:
0000 0001 1
0000 0000 0
1000 0000 -128
1000 0001 -1
1000 0002 -2
但是看看這個坑占的,簡直太突兀了,還是不要-128算了!而且如果-1>-2,那麼他們映射的二進制1000 0001 也應該自然地大于 1000 0002,這樣比較才是效率最高的,而不需要更高一層的定義。
别急别急,如果用補碼,那正負的範圍值就如絲般順滑了(論補碼的妙哉,哈哈):
注:有符号整數X,如果值大于等于0,則補碼就是原碼,如果小于0,則為2^n X
0000 0001 1
0000 0000 0
1000 0000 -128
1000 0001 -127
.........
1111 1111 -1
重新排列一下,就更符合自覺,更直觀了,而且我們發現有符号無符号整數的二進制是一樣的,關鍵就在于上層語言怎麼解釋了,比如1111 1111可以是255,也可以是-1。所以有無符号,純粹就是上層語言怎麼定義了。
0000 0000 0
0000 0001 1
...
0111 1111 127
1000 0000 -128
1000 0001 -127
....
1111 1111 -1
其他short, int,long long一樣一樣的,公式為:-2^(n-1) ~ 2^(n-1) - 1
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!