之前一直不清楚數據類型的取值范圍是怎么計算的,現在弄懂了,記錄一下。
char型示例
signed char類型取值范圍計算[1]
假設一個字符型變量占用一個字節,也就是8個二進制位(bit),由於是signed,所以最高為可以為1(負數)或0(正數)。
- 當最高位為1時,能表示的范圍是【1000 0000】-【1111 1111】。然后按照二進制轉十進制的規則計算,二進制“1000 0000”將8bit全部取反,變成“0111 1111”,再加上1變成“1000 0000”,此時按照無符號數來計算,其十進制為128,加上負號變為-128。“1111 1111”根據相同規則轉換為十進制數-1。其取值范圍為【-128,-1】。
- 當最高位為0時,能表示的范圍是【0000 0000】-【0111 1111】。二進制“0000 0000”的十進制為0,“0111 1111”的十進制為“\(2^{6}\)+\(2^{5}\)+\(2^{4}\)+\(2^{3}\)+\(2^{2}\)+\(2^{1}\)+\(2^{0}\) = 127,因此符號位為0時,其取值范圍為【0,127】。
結合兩種情況,整個signed char類型的取值范圍為【-128,127】。
unsigned char類型取值范圍計算
unsigned是無符號的,所以它能表示的范圍是【0000 0000】-【1111 1111】,將范圍轉化為十進制數為【0,255】。
其他類型
其他類型以此類推。