什么叫一個型別的大小將決定一個變數可以容納多少個不同的可能值
。例如,在我的書中,它說一個char變數可以容納從-128到127的數值范圍
。我只是想了解黑體字的文字所暗示的內容。
uj5u.com熱心網友回復:
N位可以代表2N不同的值:
1位,2值 - 0,12位,4值 - 00, 01, 10, 11
3位,8值 - 000, 001, 010, 011, 100, 101, 110, 111。
等等。
一個8位寬的型別可以代表28,或256個不同的值。一個16位寬的型別1可以代表216,或65536個不同的值。
同樣的位元模式可以有不同的解釋方式。 有幾種不同的方式來表示有符號的整數值--二補、一補和符號大小是你最有可能聽到的三種方式,而二補是迄今為止最常見的。 下面是一個4位的例子,顯示了在每種方案中位元是如何解釋的:
Bits Unsigned Two's Cmp Ones' Cmp Sign-Mag
---- -------- --------- --------- --------
0000 0 0 0 0
0001 1 1 1 1
0010 2 2 2 2
0011 3 3 3 3
0100 4 4 4 4
0101 5 5 5 5
0110 6 6 6 6
0111 7 7 7 7
1000 8 8 7 0
1001 9 7 6 1
1010 10 6 5 2
1011 11 5 4 3
1100 12 4 3 4
1101 13 3 2 5
1110 14 2 1 6
1111 15 1 0 7
4位可以代表16個不同的值,但這些值取決于如何解釋這些位元。
因此,unsigned char代表[0...255]范圍內的值(假設CHAR_BIT == 8),而signed char代表[-128...127]范圍內的值(假設CHAR_BIT == 8和有符號值的二補表示)。 這是相同的數量的值(256),只是在不同的范圍。
類似地,一個32位的float可以和一個32位的int代表相同的數值(4294967296),但是它們的解釋是不同的。 位模式439d145a16可以代表浮點值3.14159或整數值1134367834(假定為IEEE-754單精度浮點)。
<小時
unsigned char以外的型別的值表示沒有幫助,但是你不可能在現代硬體上看到這樣的東西。
uj5u.com熱心網友回復:
變數被存盤在由位元組組成的記憶體中。每個變數型別在表示這些位元組的方式和保留的位元組數上都有所不同。 對于你的例子,一個char包含在一個1位元組的記憶體塊中,而這個位元組擁有8個位元。當你用無符號數表示這些位元時,你能得到的最小數字是0(0b00000000),最大數字是255(0b11111111)。回到char的例子,char是以有符號的方式表示的,搜索2's complement以獲得更多的細節,這種表示方法可以通過改變位元組的翻譯方式來保持你提到的數值。例如,數字(0b00000000)仍然是0,但數字(0b11111111)是-1。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/315432.html
標籤:
