跳轉到內容

C++ 程式設計/示例/資料和變數

來自華夏公益教科書

資料和變數

[編輯 | 編輯原始碼]

讓我們編寫一個程式,列印位元組可以容納的每個值。我們該怎麼做呢?我們可以編寫一個迴圈,從 0 到 255。在我們的程式中,我們可以從值 0 開始,並等待它再次變為 0 然後退出。這將確保我們遍歷位元組可以容納的每個值。

在您的 main() 函式中,編寫以下內容。暫時不用擔心迴圈。我們現在更關心輸出。

char b=0;
 
do
{
  cout << (int)b << " ";
  b++;
  if ((b&15)==0) cout << endl;
} while(b!=0);

b 是我們的位元組,我們將其初始化為 0。在迴圈中,我們列印其值。我們將其強制轉換為 int,以便打印出數字而不是字元。現在不用擔心強制轉換或 int。下一行遞增我們位元組 b 中的值。然後,我們使用程式碼“b&15”在每 16 個數字後列印一個新行(回車/endl),該程式碼使用“&”,即按位與運算子,以及值 15(二進位制中的 00001111),以給出最低 4 位的值,這將是 16 的每個倍數的 0,因為 16 是二進位制中的 00010000,所以用它乘以某些東西只會改變更高位,而不會改變低位。我們這樣做是為了能夠在一行上列印 16 個值,並在螢幕上同時檢視所有 256 個值,因此只需要使用 16 行,假設一行可以容納 16 個值。

如果您執行此程式,您會注意到一些奇怪的事情。在 127 之後,我們得到了 -128!負數!這些數字從哪裡來?事實證明,編譯器必須知道我們是否使用可以為負數的數字或只能為正數的數字。這些分別稱為有符號數和無符號數。預設情況下,編譯器假設我們要使用有符號數,除非我們明確告訴它否則。要解決我們的小問題,在 b 的宣告前面新增“unsigned”,使其讀取

unsigned char b=0;

問題解決了!

華夏公益教科書