程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 解讀為什麼有符號的char可表示范圍是-128~+127,char-128

解讀為什麼有符號的char可表示范圍是-128~+127,char-128

編輯:關於C語言

解讀為什麼有符號的char可表示范圍是-128~+127,char-128


問:為什麼有符號的char可表示范圍是-128~+127?

要明白這個問題,首先要明白一下幾點:

當計算機知道了這些規則後就可以完美轉化了,那我們看看計算機是如何轉化的:

首先計算機中的8位變化范圍是:

計算機中的補碼    我們轉化後的原碼    我們從原碼得到的十進制數    實際表示的十進制

0000 0000          0000 0000              0                                            0

.....                        ....                           ....                                            ....

0111 1111          0111 1111              127                                        127

1000 0000          1000 0000              128                                       -128

....                         ....                            .....                                          ......

1111 1111           0000 0001              1                                           -1

看到那個128怎麼一下變成了-128,還有那個1怎麼一下子變成了-1,再回去看看第三條規則就知道,計算機已經知道它這8位裡面存儲的是一個負數,不要給自己強加那個符號位的概念,那是給計算機的一個識別標志,計算機由這個識別標示知道它裡面存儲的是正數還是負數,並不影響我們使用這個位上的值,所以我們計算出來的這個128,它是個負的,故由上面的推導可以看出范圍是-128到127

關於補碼的兩個練習題:

問main函數最後的輸出結果是?

 1 int main(void)
 2 {
 3     char a[1000];
 4     int i=0;
 5     for(i=0;i<1000;i++)
 6     {
 7         a[i]=-1-i;
 8     }
 9     printf("%d\n",strlen(a));
10     return 0;
11 }

結果是:255

問foo函數輸出結果是多少?

1 void foo()
2 {
3     unsigned int a=6;
4     int b=-20;
5     (a+b)>6?puts(">6"):puts("<=6");
6     printf("%u\n",a+b);
7 }

結果是 >6

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved