1. 程式人生 > >C語言-資料型別(整型)

C語言-資料型別(整型)

程式中使用的各種變數都應預先加以說明,即先說明,後使用。對變數的說明可以包括三個方面:
·資料型別·儲存型別·作用域。所謂資料型別是按被說明量的性質,表示形式,佔據儲存空間的多少,構造特點來劃分的。在C語言中,資料型別可分為:基本資料型別、構造資料型別、指標型別、空型別。

基本資料型別:其值不可以再分解為其他型別。它包括:整形、實形(浮點形(單精度、雙精度))、字元形、列舉形。

構造資料型別:包括陣列型別、結構體型別、共用體型別。

對於基本資料型別量,按其取值是否可改變又分為常量和變數兩種。在程式執行過程中,其值不發生改變的量稱為常量,取值可變的量稱為變數。它們可與資料型別結合起來分類。例如,可分為整型常量、整型變數、浮點常量、浮點變數、字元常量、字元變數、列舉常量、列舉變數。在程式中,常量是可以不經說明而直接引用的,而變數則必須先說明後使用.

常量和符號常量

直接常量(字面常量): 整型常量:12、0、-3; 實型常量:4.6、-1.23; 字元常量:‘a’、‘b’

符號常量:用標示符代表一個常量。在C語言中,可以用一個識別符號來表示一個常量,稱之為符號常量。

符號常量在使用之前必須先定義,其一般形式為:#define 識別符號 常量

其中#define也是一條預處理命令(預處理命令都以"#"開頭),稱為巨集定義命令,其功能是把該識別符號定義為其後的常量值。一經定義,以後在程式中所有出現該識別符號的地方均代之以該常量值。 習慣上符號常量的識別符號用大寫字母,變數識別符號用小寫字母,以示區別。

#define PRICE 30

int main(void)

{ int num,total;

num=10;

total=num* PRICE;

printf(“total=%d”,total);

return 0;

}

整形常量

最後一點很重要,C/C++中,10進位制數有正負之分,比如12表示正12,而-12表示負12,;但8進位制和16進位制只能用來表達無符號的正整數,如果你在程式碼中裡:-078,或者寫:-0xF2,C,C++並不把它當成一個負數。

-------------------------------

#include <stdio.h>

int main(void)
{
int i = -3 ;
printf("0x%x\n", i);
return 0;
}
列印的是 0xfffffffd;

int main(void)
{
int i = 0xfffffffd;
printf("%d\n", i);
return 0;
}
列印的是 -3

-------------------------

1.八進位制整常數八進位制整常數必須以0開頭,即以0作為八進位制數的字首。數碼取值為0~7。八進位制數通常是無符號數。
以下各數是合法的八進位制數:
015(十進位制為13) 0101(十進位制為65) 0177777(十進位制為65535)
以下各數不是合法的八進位制數:
256(無字首0) 03A2(包含了非八進位制數碼) -0127(出現了負號)

A.八進位制與二進位制的轉換
二進位制轉換到八進位制
方法是:只要將二進位制數從小數點開始,整數部分從右向左3位一組,小數部分從左向右3位一組(不足3位補零)。例: (110110.0011 )2=(110 110.001 100 )2=( 66.14 )8 (不足部分用零補足3位)

八進位制數轉換成二進位制數
 八進位制數轉換成二進位制數的方法:每位八進位制數用3位二進位制數代替。
例:(12.34)8 = (001 010.011 100 )2

B.八進位制與十進位制之間的轉換

八進位制轉換為十進位制

八進位制就是逢8進1。八進位制數採用 0~7這八數來表達一個數。八進位制數第0位的權值為8的0次方,第1位權值為8的1次方,第2位權值為8的2次方……所以,設有一個八進位制數:1507,轉換為十進位制為:用豎式表示:1507換算成十進位制。

第0位 7 * 80 = 7

第1位 0 * 81 = 0

第2位 5 * 82 = 320

第3位 1 * 83 = 512 +

--------------------------

839

同樣,我們也可以用橫式直接計算:

7 * 80 + 0 * 81 + 5 * 82 + 1 * 83 = 839 

結果是,八進位制數 1507 轉換成十進位制數為 839

十進位制轉換為八進位制:

何將十進位制數120轉換成八進位制數。

用表格表示:

被除數 計算過程 餘數
120 120/8 15 0
15 15/8 1 7
1 1/8 0 1
120轉換為8進位制,結果為:170。

八進位制數與十六進位制的轉換
  方法:利用常規轉換方法,可以先把八進位制轉換為十進位制或二進位制,再轉換成十六進位制。
  例:(34.218=(011 100.010 0012=(0001 1100.0100 01002=(1C.4416
248=(2010=(1416
3A.5216=(0011 1010.0101 00102=(000 111 010.010 100 1002(72.244)8
5916=(8910=(1318

2.十六進位制整常數
十六進位制整常數的字首為0X或0x。其數碼取值為0~9,A~F或a~f。
以下各數是合法的十六進位制整常數:
0X2A(十進位制為42)  0XA0 (十進位制為160)  0XFFFF (十進位制為65535)
以下各數不是合法的十六進位制整常數:
5A (無字首0X)  0X3H (含有非十六進位制數碼)
A:十六進位制轉換為十進位制

2進位制,用兩個阿拉伯數字:0、1;8進位制,用八個阿拉伯數字:0、1、2、3、4、5、6、7;10進位制,用十個阿拉伯數字:0到9;16進位制,用十六個阿拉伯數字……等等,阿拉伯人或說是印度人,只發明瞭10個數字啊?

16進位制就是逢16進1,但我們只有0~9這十個數字,所以我們用A,B,C,D,E,F這五個字母來分別表示10,11,12,13,14,15。字母不區分大小寫。十六進位制數的第0位的權值為16的0次方,第1位的權值為16的1次方,第2位的權值為16的2次方……所以,在第N(N從0開始)位上,如果是是數 X (X 大於等於0,並且X小於等於 15,即:F)表示的大小為 X * 16的N次方。假設有一個十六進數 2AF5, 那麼如何換算成10進位制呢?用豎式計算: 2AF5換算成10進位制:

第0位: 5 * 160 = 5

第1位: F * 161 = 240

第2位: A * 162 = 2560

第3位: 2 * 163 = 8192 +

-------------------------------------

10997 直接計算就是:5 * 160 + F * 161 + A * 162 +2 * 163 = 10997

(別忘了,在上面的計算中,A表示10,而F表示15) 

現在可以看出,所有進位制換算成10進位制,關鍵在於各自的權值不同。

假設有人問你,十進數 1234 為什麼是 一千二百三十四?你儘可以給他這麼一個算式:

1234 = 1 * 103 + 2 * 102 + 3 * 101 + 4 * 100

十進位制轉換為十六進位制

10進位制數轉換成16進位制的方法,和轉換為2進位制的方法類似,惟一變化:除數由2變成16。同樣是120,轉換成16進位制則為:

被除數 計算過程 餘數
120 120/16 7 8
7 7/16 0 7

 120轉換為16進位制,結果為:78。

B:十六進位制與二進位制的轉換二進位制和十六進位制的互相轉換比較重要。不過這二者的轉換卻不用計算,每個C,C++程式設計師都能做到看見二進位制數,直接就能轉換為十六進位制數,反之亦然。

首先我們來看一個二進位制數:1111,它是多少呢?

你可能還要這樣計算:1 * 20 + 1 * 21 + 1 * 22 + 1 * 23 = 1 * 1 + 1 * 2 + 1 * 4 + 1 * 8 = 15。

然而,由於1111才4位,所以我們必須直接記住它每一位的權值,並且是從高位往低位記,:8、4、2、1。即,最高位的權值為23 = 8,然後依次是 22 = 4,21=2, 20 = 1。記住8421,對於任意一個4位的二進位制數,我們都可以很快算出它對應的10進位制值。

下面列出四位二進位制數 xxxx 所有可能的值(中間略過部分)

僅4位的2進位制數 快速計算方法 十進位制值 十六進值

1111 = 8 + 4 + 2 + 1 = 15 F

1110 = 8 + 4 + 2 + 0 = 14 E

1101 = 8 + 4 + 0 + 1 = 13 D

1100 = 8 + 4 + 0 + 0 = 12 C

1011 = 8 + 4 + 0 + 1 = 11 B

1010 = 8 + 0 + 2 + 0 = 10 A

1001 = 8 + 0 + 0 + 1 = 10 9

....

0001 = 0 + 0 + 0 + 1 = 1 1

0000 = 0 + 0 + 0 + 0 = 0 0

二進位制數要轉換為十六進位制,就是以4位一段,分別轉換為十六進位制。

如(上行為二制數,下面為對應的十六進位制):

1111 1101 , 1010 0101 , 1001 1011

F D , A 5 , 9 B  

反過來,當我們看到 FD時,如何迅速將它轉換為二進位制數呢?

先轉換F:看到F,我們需知道它是15(可能你還不熟悉A~F這五個數),然後15如何用8421湊呢?應該是8 + 4 + 2 + 1,所以四位全為1 :1111。接著轉換 D:看到D,知道它是13,13如何用8421湊呢?應該是:8 + 2 + 1,即:1011。所以,FD轉換為二進位制數,為: 1111 1011

由於十六進位制轉換成二進位制相當直接,所以,我們需要將一個十進位制數轉換成2進位制數時,也可以先轉換成16進位制,然後再轉換成2進位制。比如,十進位制數 1234轉換成二制數,如果要一直除以2,直接得到2進位制數,需要計算較多次數。所以我們可以先除以16,得到16進位制數:

被除數 計算過程 餘數
1234 1234/16 77 2
77 77/16 4 13 (D)
4 4/16 0 4

結果16進製為: 0x4D2 然後我們可直接寫出0x4D2的二進位制形式: 0100 1011 0010。同樣,如果一個二進位制數很長,我們需要將它轉換成10進位制數時,除了前面學過的方法是,我們還可以先將這個二進位制轉換成16進位制,然後再轉換為10進位制。下面舉例一個int型別的二進位制數:01101101 11100101 10101111 00011011我們按四位一組轉換為16進位制: 6D E5 AF 1B

10進位制數轉換為2進位制數

給你一個十進位制,比如:6,如果將它轉換成二進位制數呢?10進位制數轉換成二進位制數,這是一個連續除2的過程:把要轉換的數,除以2,得到商和餘數,將商繼續除以2,直到商為0。最後將所有餘數倒序排列,得到數就是轉換結果。

聽起來有些糊塗?我們結合例子來說明。比如要轉換6為二進位制數。 

“把要轉換的數,除以2,得到商和餘數”。 那麼:

要轉換的數是6, 6 ÷ 2,得到商是3,餘數是0。 (不要告訴我你不會計算6÷3!)

“將商繼續除以2,直到商為0……”

現在商是3,還不是0,所以繼續除以2。

那就: 3 ÷ 2, 得到商是1,餘數是1。 

“將商繼續除以2,直到商為0……”

現在商是1,還不是0,所以繼續除以2。

那就: 1 ÷ 2, 得到商是0,餘數是1 (拿筆紙算一下,1÷2是不是商0餘1!)

“將商繼續除以2,直到商為0……最後將所有餘數倒序排列”

好極!現在商已經是0。我們三次計算依次得到餘數分別是:0、1、1,將所有餘數倒序排列,那就是:110了!6轉換成二進位制,結果是110。 

把上面的一段改成用表格來表示,則為:

被除數 計算過程 餘數
6 6/2 3 0
3 3/2 1 1
1 1/2 0 1

(在計算機中,÷用 / 來表示)

1)我們學會了如何將二、八、十六進位制數轉換為十進位制數。

三種轉換方法是一樣的,都是使用乘法。

2)我們學會了如何將十進位制數轉換為二、八、十六進位制數。

方法也都一樣,採用除法。  

3)我們學會了如何快速的地互換二進位制數和十六進位制數。

要訣就在於對二進位制數按四位一組地轉換成十六進位制數。

在學習十六進位制數後,我們會在很多地方採用十六進位制數來替代二進位制數。

整型變數

整型變數可分為以下幾類:
1.基本型
型別說明符為int,在記憶體中佔2個位元組,其取值為基本整常數。
2.短整量
型別說明符為short int或short。所佔位元組和取值範圍均與基本型相同。
3.長整型
型別說明符為long int或long ,在記憶體中佔4個位元組,其取值為長整常數。
4.無符號型
型別說明符為unsigned。
無符號型又可與上述三種類型匹配而構成:
(1)無符號基本型 型別說明符為unsigned int或unsigned。
(2)無符號短整型 型別說明符為unsigned short
(3)無符號長整型 型別說明符為unsigned long
各種無符號型別量所佔的記憶體空間位元組數與相應的有符號型別量相同。但由於省去了符號位,故不能表示負數。 下表列出了Turbo C中各類整型量所分配的記憶體位元組數及數的表示範圍。
型別說明符    數的範圍     分配位元組數
int       -32768~32767     ■■
short int    -32768~32767     ■■
signed int    -32768~32767     ■■
unsigned int   0~65535        ■■
long int  -2147483648~2147483647  ■■■■
unsigned long  0~4294967295     ■■■■
整型變數的說明
變數說明的一般形式為: 型別說明符 變數名識別符號,變數名識別符號,...; 例如:
int a,b,c; (a,b,c為整型變數)
long x,y; (x,y為長整型變數)
unsigned p,q; (p,q為無符號整型變數)

C 語言中,整數常量預設是十進位制(decimal)整數。通過在整數常量前面加上特定的字首,可以把它設定為八進位制或者十六進位制整數。字首 0x 或者 0X 把整數常量設定為十六進位制整數。注意,是數字 0 ,而不是字母 O ,別搞錯了哦!例如:十進位制的 16 用十六進位制來表示是 0x10 或者 0X10 。在整數常量前面加上字首 0 ,表示它是八進位制整數。注意,是數字 0 ,而不是字母 O 。例如:十進位制的 16 表示為八進位制就是 020 。

目前,long long 一般 64 位,long 是 32 位,short 是 16 位,而 int 或者 16 位,或者 32 位。具體某個編譯器到底使用多少位來表示這些型別,我們可以用運算子 sizeof 來獲取。例如:

printf( "%lu\n", (unsigned long)sizeof(int) * 8 ); /* 輸出 int 的位數 */

sizeof 運算子返回其運算元佔用空間的大小,以位元組(Byte)為單位。注意,C 定義位元組的大小為 char 型別的大小。char 通常是 8 位(bit)的,當然也可以更大。

以八進位制或者十六進位制形式輸出資料

使用格式限定符 %o 可以以八進位制的形式輸出整數。注意,是小寫字母 o ,不是數字 0 。使用 %x 或者 %X 可以以十六進位制的形式輸出整數。小寫 x 表示輸出使用小寫字母,大寫 X 表示輸出使用大寫字母。使用 %#o,%#x 或者 %#X,得到的輸出將包括字首 0,0x 或者 0X。例如:

#include <stdio.h>
int main(void)
{
int x=200;
printf("dec=%d,octal=%o,hex=%x\n",x,x,x);
printf("dec=%d,octal=%o,hex=%X\n",x,x,x);
printf("dec=%d,octal=%#o,hex=%#x\n",x,x,x);
printf("dec=%d,octal=%#o,hex=%#X\n",x,x,x);
return 0;
}這個程式的輸出是:

dec=200,octal=310,hex=c8
dec=200,octal=310,hex=C8
dec=200,octal=0310,hex=0xc8
dec=200,octal=0310,hex=0XC8
格式限定符:

%d,%o,%x(%#o,%#x,%#X) int unsigned %u
%hd,%ho,%hx(%#h0,%#hx,%#hX) short int unsigned short %hu
%ld,%lo,%lx(%#lo,%#lx,%#lX) long int unsigned long %lu

八進位制數在轉義符中的使用
我們學過用一個轉義符'\'加上一個特殊字母來表示某個字元的方法,如:'\n'表示換行(line),而'\t'表示tab字元,'\''則表示單引號。今天我們又學習了一種使用轉義符的方法:轉義符'\'後面接一個八進位制數,用於表示ascii碼等於該值的字元。

比如,查一下第5章中的ascii碼錶,我們找到問號字元(?)的ascii值是63,那麼我們可以把它轉換為八進值:77,然後用 '\77'來表示'?'。由於是八進位制,所以本應寫成 '\077',但因為c,c++規定不允許使用斜槓加10進位制數來表示字元,所以這裡的0可以不寫。

十六進位制數在轉義符中的使用


轉義符也可以接一個16進位制數來表示一個字元。如在6.2.4小節中說的 '?' 字元,可以有以下表達方式:

'?' //直接輸入字元

'\77' //用八進位制,此時可以省略開頭的0

'\0x3f' //用十六進位制 

相關推薦

C語言資料型別()

程式中使用的各種變數都應預先加以說明,即先說明,後使用。對變數的說明可以包括三個方面: ·資料型別·儲存型別·作用域。所謂資料型別是按被說明量的性質,表示形式,佔據儲存空間的多少,構造特點來劃分的。在C語言中,資料型別可分為:基本資料型別、構造資料型別、指標型別、空型別。

C語言的三種資料型別:int、short int和long int

int資料型別的位數為16位,short int資料型別的位數也是16位。而long int的位數為32位,可用來儲存比較大的整數。  short int 和 long int可以縮寫為short 和 long。               C語言中的整型資料型別int、

5. C語言基本資料型別及構造資料型別,浮點儲存規則及記憶體模型

  其實學習C語言的時候有一件很頭疼的事就是各種各樣的資料型別,不同的場合不同的用途不同的資料要使用不同的資料型別,那又為什麼要分出這麼多種型別呢,因為型別決定了開闢空間的大小,開闢空間的大小又決定了儲存的範圍。今天,就資料型別這個問題我們來掰扯掰扯。   C

線性表(順序表)C語言程式碼實現-處理資料(附詳細解釋)。 _清風明月

#include <stdio.h>#include <conio.h>//conio是Console Input / Output(控制檯輸入輸出)的簡寫,其中定義了通過控制檯進行資料輸入和資料輸出的函式, //主要是一些使用者通過按鍵盤產生的對應

python02 運算子,基本資料型別,,字串

1.python開發IDE    pycharm,python編寫工具,, #專業版 #不需要漢化 註冊碼問題解決 https://www.cnblogs.com/evlon/p/4934705.html整體註釋:選中後,ctrl+? 2.運算子 算數運算子  &n

c語言基礎-變數(

一、整型變數 型別 關鍵字 取值範圍 儲存單元位元組數(非固定) 輸出 有符號整型 [signed] int -2147483648~2147483647 4 %d 無

C語言資料型別

1. 下面的例項演示了獲取 int 型別的大小: 程式碼: #include <stdio.h> #include <limits.h> int main() { printf("int 儲存大小 : %lu \n", sizeof(int)); ret

Python資料型別——、布林、列表、元祖、字典

Python直譯器可以自動識別使用者輸入的資料型別。建立物件的資料型別,可以通過type檢視。需要注意的是:使用者通過input輸入的資料,其型別均為字串 num1 = input("please input num1: ") num2 = input("please input num2: ") prin

第二章:C語言資料型別

一、識別符號的命名規範 程式設計時給變數或者函式起的名字就是識別符號,就好比我們人都有姓名,姓名就是這個人的識別符號。C語言的識別符號是不可以隨便起名字的,必須遵守一定的規則。 C 語言規定,識別符號可以是字母(A~Z,a~z)、數字(0~9)、下劃線_組成的字串,並且第

C#與C++和C語言之間資料型別的對應

一、C#與C++資料型別的對應表  

c語言常用資料型別所佔用的位元組數

一、資料型別所佔用位元組數與機器字長與編譯器有關,遵循的幾條規律如下: sizeof(short int )<=sizeof(int) sizeof(int)<=sizeof(long int) short int 至少應為16位(2個位元組) long in 至少應為32位(

C語言資料型別的本質

  資料型別可以理解為固定記憶體大小的別名。比如int型別,就是表示佔用4位元組的記憶體。 1 資料型別的大小   用sizeof操作符獲得資料型別的大小。    比如 int a[5];   sizeof(a)就可以得出int型陣列a的大小是20位元組

C語言基本資料型別short、int、long、char、float、double

1.概述  C 語言包含的資料型別如下圖所示2.各種資料型別介紹2.1整型  整形包括短整型、整形和長整形。2.1.1短整形  short a=1;2.1.2整形  一般佔4個位元組(32位),最高位代表符號,0表示正數,1表示負數,取值範圍是-2147483648~2147

陣列處理演算法(十四)不用庫函式,用C語言實現將一數轉換成字串

不用庫函式,用C語言實現將一整型數轉換成字串,如:int a=123456,轉換成"123456"。 如題,要求將一整型數轉換為字串。這裡要考慮的是整型數可能是負數、正數和0。 實現如下: char

c語言基本資料型別所佔的位數

1.C++的short、int、long和long long型別通過使用不同數目的位來儲存值,最多能夠表示4中不同的整數寬度。C++提供了一種靈活的標準,它確保了最小長度(從C語言借鑑而來),如下: 1. short 至少16位 2. int 至少與 short 一樣長 3

C語言資料型別及範圍

資料型別 序號 型別與描述 1 基本型別:它們是算術型別,包括兩種型別:整數型別和浮點型別。 2 列舉型別:它們也是算術型別,被用來定義在程式中只能賦予其一定的離散整數值的變數。 3 void 型別:型別說明

C語言資料型別總結

1.c語言的資料型別的分類: 分為四大類:基本資料型別、指標型別、空型別、構造型別。 基本資料型別:整型(int)、單精度浮點型(float)、雙精度浮點型(double)、字元型(char); 注:

C語言各種資料型別取值範圍

轉自:http://blog.csdn.net/mafuli007/article/details/7325510 速查表: char -128 ~ +127 (1 Byte) short -32768 ~ + 32767 (2 Bytes) unsigned sho

C語言一些資料型別

  一.C語言的資料型別 資料型別可分為 1.基本資料型別    2.構造資料型別 3.指標資料型別 4.空型別 在計算機中  我們把小數稱為 浮點數  把  這種'A'、'x'、'D'、 '?'、'3'、'X’   稱為 字元型    其中我們修飾這些基本型別還有4個修飾詞 sh

C語言基本資料型別簡介

1.概述   C 語言包含的資料型別如下圖所示: 2.各種資料型別介紹 2.1整型   整形包括短整型、整形和長整形。 2.1.1短整形   short a=1; 2.1.2整形   一般佔4個位元組(32位),最高位代表符號,0表示正數,1表示負數,取值範圍是-2147483648~2147483647