程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 對char類型的理解以及對補碼的理解分析,char類型理解補碼

對char類型的理解以及對補碼的理解分析,char類型理解補碼

編輯:關於C語言

對char類型的理解以及對補碼的理解分析,char類型理解補碼


  今天遇到這樣一個小程序,覺得當中有些問題很容易讓人忽略的!

  這個程序代碼如下:

      

  程序的結果為:

     

  我想很多像我一樣的小白可能才開始是想不明白為什麼最後的結果是255吧!首先,我們得知道 strlen()是計算字符串長度的函數,但為什麼最後得到的字符串長度是255呢?定義的數組a中不是有1000個元素,並且for循環也是執行999次嗎?

  對於char來說,我們得知道其隱含的結束標記是\0,當編譯器識別一個char類型的變量時,讀取到\0,則標志著結束;對於這個程序,我們還得注意char的取值圍:-128~127

所以當i = 128時  a[128] = -1 -128 = -129 ,那麼到這裡就出現問題了,a 中元素的最小值只能為-128,怎麼辦?在這裡得知道,在計算機中,存儲數據都是以補碼的方式存儲的,-128在計算機中的編碼為1000 0000  ,-1的補碼為1111 1111 ,所以-129 的補碼為 1 0111 1111 ,但是char中的二進制位只有八位,所以把最高位丟掉,剩下的其余為作為補碼,也就是0111 1111(0x7f)通過循環,依次減一  0x7d,0x7c,0x7b,0x7a,0x79,0x78,0x77,0x76,0x75,0x74,0x73,0x72,0x71,0x70......0x00,所以當編碼為0x00時,a[255]= 0;所以當a[255]= 0時,作為字符串結束的標志,在a[0]~a[254]的元素都不為0,所以最終程序執行的結果就是字符串a的長度為255.

 

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