整數是我們生活中常用的數據類型,也是編程中常用的一種數據,C語言用int關鍵字來定義整數變量(int 是 integer 的簡寫)。
在定義變量的時候,可以加signed、unsigned、short和long四種修飾符。
signed:有符號的,可以表示正數和負數。
unsigned:無符號的,只能表示正數,例如數組的下標、人的身高等。
short:短的,現在主流的64位操作系統下,整數佔用內存4個字節,使用 4
個字節保存較小的整數綽綽有餘,會空閒出兩個字節來,這些字節就白白浪費掉了。在C語言被髮明的早期,或者在單片機和嵌入式系統中,內存都是非常稀缺的資源,所有的程序都在儘可能節省內存。
long:長的,更長的整數。
一、二進制、八進制、十六進制整數的書寫
一個數字默認就是十進制的,表示一個十進制數字不需要任何特殊的格式。但是,表示一個二進制、八進制或者十六進制數字就不一樣了,爲了和十進制數字區分開來,必須採用某種特殊的寫法,具體來說,就是在數字前面加上特定的字符,也就是加前綴。
1、二進制
二進制由 0 和 1 兩個數字組成,使用時必須以0b或0B(不區分大小寫)開頭。
以下是合法的二進制:
int a = 0b101; // 換算成十進制爲 5
int b = -0b110010; // 換算成十進制爲 -50
int c = 0B100001; // 換算成十進制爲 33
以下是非法的二進制:
int m = 101010; // 無前綴 0B,相當於十進制
int n = 0B410; // 4不是有效的二進制數字
請注意,標準的C語言並不支持上面的二進制寫法,只是有些編譯器自己進行了擴展,才支持二進制數字。換句話說,並不是所有的編譯器都支持二進制數字,只有一部分編譯器支持,並且跟編譯器的版本有關係。
2、八進制
八進制由 0~7 八個數字組成,使用時必須以0開頭(注意是數字 0,不是字母 o)。
以下是合法的八進制數:
int a = 015; // 換算成十進制爲 13
int b = -0101; // 換算成十進制爲 -65
int c = 0177777; // 換算成十進制爲 65535
以下是非法的八進制:
int m = 256; // 無前綴 0,相當於十進制
int n = 03A2; // A不是有效的八進制數字
3、十六進制
十六進制由數字 0~9、字母 A~F 或a~f(不區分大小寫)組成,使用時必須以0x或0X(不區分大小寫)開頭。
以下是合法的十六進制:
int a = 0X2A; // 換算成十進制爲 42
int b = -0XA0; // 換算成十進制爲 -160
int c = 0xffff; // 換算成十進制爲 65535
以下是非法的十六進制:
int m = 5A; // 沒有前綴 0X,是一個無效數字
int n = 0X3H; // H不是有效的十六進制數字
4、需要注意的坑
在現實生活和工作中,我們在寫十進制數的時候,爲了對齊或其它原因,在數值前面加0是無關緊要的,但是,在C語言中,不要在十進制數前加0,會被計算機誤認爲是八進制數。
二、二進制、八進制、十六進制整數的輸出
下表是各種進制整數的輸出格式。
細心的讀者可能會發現,上表中沒有二進制的輸出格式,雖然部分編譯器支持二進制數字的書寫,但是卻不能使用printf函數輸出二進制數。您可以編寫函數把其它進制數字轉換成二進制數字,並保存在字符串中,然後在printf 函數中使用%s輸出。
示例:
/*
* 程序名:book.c,此程序用於演示二進制、八進制、十六進制整數的輸出。
* 作者:C語言技術網(www.freecplus.net) 日期:20190525。
*/
#include <stdio.h>
int main()
{
int ii=100; // 定義變量ii,賦值十進制的100。
printf("十進制輸出結果:%d\n",ii); // 十進制輸出結果:100
printf("八進制、無前綴輸出結果:%o\n",ii); // 八進制、無前綴輸出結果:144
printf("八進制、有前綴輸出結果:%#o\n",ii); // 八進制、有前綴輸出結果:0144
printf("十六進制、無前綴輸出結果:%x\n",ii); // 十六進制、無前綴輸出結果:64
printf("十六進制、有前綴(小寫)輸出結果:%#x\n",ii); // 十六進制、有前綴(小寫)輸出結果:0x64
printf("十六進制、無前綴輸出結果:%X\n",ii); // 十六進制、無前綴輸出結果:64
printf("十六進制、有前綴(大寫)輸出結果:%#X\n",ii); // 十六進制、有前綴(大寫)輸出結果:0X64
}
四、版權聲明
C語言技術網原創文章,轉載請說明文章的來源、作者和原文的鏈接。
來源:C語言技術網(www.freecplus.net)
作者:碼農有道
如果這篇文章對您有幫助,請點贊支持,或在您的博客中轉發此文,讓更多的人可以看到它,謝謝!!!