天天看點

02.C(資料類型與運算符)

(建立于2017/8/14)

1.float型變量a隻能接受7位有效數字,是以最後三位是不準确的,但double型數字是可以全部接受10位有效數字的

2.常用轉義字元:

\0 空字元 0

\t 水準制表,跳到下一個Tab位置 9

\r 回車,将目前位置移到本行的開頭 13

\n 換行,将目前位置移到下一行的開頭 10

' 雙撇号 34),"" 單撇号 39

3.逗号運算符(逗号運算的結合性是從左至右,完畢之後整個表達式的值是最後一個表達式的值。)

#include<stdio.h>
    int main(){
    int m=1,n=2;
    int a;
    a=(m+n,m-n);
    printf("a的值為%d,表達式的值為%d\n",a,a=(m+n,m-n));
    a=m+n,m-n;
    printf("a的值為%d,表達式的值為%d\n",a,(a=m+n,m-n));
    a=m+n,m-n+a;
    printf("a的值為%d,表達式的值為%d\n",a,(a=m+n,m-n+a));
    printf("");
    return 0;
 }

運作結果
a的值為-1,表達式的值為-1
a的值為3,表達式的值為-1
a的值為3,表達式的值為2
           

4.強制類型轉換

對變量進行強制類型轉換時,隻能得到一個中間值,并不改變該變量原有的類型。

5.自增運算和自減運算(++/-- 同java)

自增運算符和自減運算符是c語言特有的單目運算符,他們隻能和一個單獨的變量組成表達式。

x++和++x的相同之處是:單獨作為一個表達式語句被使用時,無論執行了哪一種表達式,執行結束後x的值都加1.

x++和++x的不同之處是:當他們出現在其他表達式中時,也就是說作為其他表達式的一部分時,兩個表達式的結果是不一樣的。++x的值等于原值+1,x++的值等于x的原值。

6.位運算

#include<stdio.h>
// 運作結果如下:(分别為取反,與,或,異或,右移與左移)
int main(){
    unsigned int A=0xb3,B=0x9a;
    printf("A=%x\n", A);
    printf("B=%x\n", B);
    printf("~A=%x\n",~A);
    printf("A&B=%x\n",A&B);
    printf("A|B=%x\n",A|B);
    printf("A^B=%x\n",A^B);
    A=27;B=28;
    printf("A<<1=%u\n",A<<1);   
    printf("A>>1=%u\n",B>>1);
    return 0;
 }
運作結果:
A=b3
B=9a
~A=ffffff4c
A&B=92
A|B=bb
A^B=29
A<<1=54
A>>1=14
           

資料類型

7.有符号數和無符号數的差別

有符号,最高位是符号位,1代表負數,0代表正數
無符号,最高位不是符号位,是數的一部分,無符号不可能是負數
           

8.char資料類型範圍

char 占一個位元組
有符号:-128~127
無符号:0~255
           

9.數值越界

char a = 127 + 2;
列印a的值為-127,從補碼的角度分析
127+2 = 129 ,129轉換為2進制是10000001,計算機是以補碼存儲資料的,是以這個2進制數是129的補碼
補碼:1000 0001
反碼:1111  1110
原碼:1111  1111(最高位是符号為) = -127

unsigned char b = 255 + 2;
257轉換位二進制0001 0000 0001
因為是無符号數,是以隻取後8位,得到的是1
           

10.sizeof

sizeof不是函數,隻是一個運算符,是以不需要包含任何頭檔案,它的功能是計算一個資料類型的大小,機關位位元組
sizeof的傳回值位size_t
size_t類型在32位作業系統下是unsigned int,是一個無符号整數
           

11.整型變量輸入輸出

short  短整型 占2個位元組
int     整型  占4個位元組
long  長整形   windows 占4個位元組 Linux占4個位元組(32位),8個
位元組(64位)
long long 8個位元組

整型資料在記憶體中占用的位元組數與所選的作業系統有關,雖然C語
言标準中沒有明确規定整型資料的長度,但是long類型整數的長度
不能短于int,short類型的長度不能長于int

當一個小的資料類型指派給一個大的資料類型,不會出錯,因為編
譯器會自動轉換,但是當一個大的資料類型指派給一個小的資料類
型,可能會丢失高位


列印格式                 含義
%d                      輸出一個有符号的十進制int類型
%o(字母o)                輸出8進制int類型
%x                      輸出16進制int類型,字母小寫
%X                      輸出16進制int類型,字母大寫
%u                      輸出10進制無符号數
           

12.字元型

字元變量實際上并不是把該字元本身放到變量的記憶體單元中去,而
是将該字元對應的ADCII編碼放到變量的存儲單元中,char的本質就
是一個位元組大小的整型,記憶體中沒有字元,隻有數字,一個數字對
應一個字元,這種規則就是ASCII,使用字元或數字給字元變量指派
是一樣的

char ch = 'a'    char ch = 97 等價

小寫字母比大小字母的位元組大32
小寫轉大寫 'a'-32
大寫轉小寫 'A'+32
           

13.轉義字元

char a = 'abc'  //原則上''内部隻有一個字元,轉移字元除外,這種寫法不合适,會有警報
轉義字元,由反斜杠組成的多個字元"\"
           

14.浮點型:float double

實型變量也稱為浮點型變量,存儲小數數值
單精度浮點數float: 占用空間4個位元組,有效存儲7位
雙精度浮點型:占用8個位元組,有效存儲15~16
預設是double,加上f結尾是float,3.14是double類型,3.14f是float
           

15.類型限定符

extern : 聲明一個變量,extern生命的變量沒有建立存儲空間 extern int a
const : 定義一個常量,值不能修改
volatile :放置編譯器優化代碼
register : 定義寄存器變量,提高效率,register是建議型的指令,而
不是指令型的指令,如果CPU由空閑寄存器,那麼register就生效,
如果沒有空閑寄存器,就無效
           

運算符