C語言基礎(chǔ)開獎開講-(變量至運算符)

C語言基礎(chǔ)

程序編譯

  1. gcc xx.c會默認(rèn)生成一個a.out的可執(zhí)行文件,在a.out所在目錄下執(zhí)行,執(zhí)行./a.out
  2. 程序編譯可以用gcc XX.c -o XX ,注意不要命名成xx.c,這樣會覆蓋原先的xx.c文件內(nèi)容。
  3. gcc xx.c -o xx -g -wall,-g -wall的意思是開啟所有的語法警告。
  4. gcc只檢查語法錯誤,不會檢查邏輯錯誤。
  5. 每次修改完程序,都必須要執(zhí)行一次gcc。

hello world程序

int main()
{
    return 0;
}
  1. 可執(zhí)行程序一執(zhí)行,就會去找一個叫做main的函數(shù),然后運行main{}里的語句。
  2. 一個.c文件有且只能有一個main的函數(shù)。
  3. 一個函數(shù)碰到return就會結(jié)束,return后面的語句將永遠(yuǎn)不會被執(zhí)行。
  4. 如果是main函數(shù),他可以將前面的int省略,return也是可以省略的。
  5. main(int argc,char *argv[])
  6. include <stdio.h>是一個C語言標(biāo)準(zhǔn)輸出輸入庫。

注釋

  1. //代表單行注釋,
  2. /* code */代表多行注釋。
  3. /* 會與碰到的第一個//*/匹配
  4. //可以用來附加解釋的作用,或用來注釋代碼
  5. 寫清文件名,文件產(chǎn)權(quán),文件制作方,如果是某人,要寫清聯(lián)系方式。

printf:打印函數(shù)

  • 打印""里面的語句
  • \n是轉(zhuǎn)義字符代表換行
int main()
{
    int a=6;
    float b=9.8;
    printf("a=%d,b=%f",a,b);
}
  • %d:是占位符,輸出整數(shù)
  • %c是占位符,輸出字符
  • %f是占位符,輸出浮點數(shù)
  • %lf是占位符,輸出double類型的數(shù)據(jù)
  • printf("%m.nf");
    • m<n+1+小數(shù)點前的個數(shù)時,無意義

代碼格式

main()
{
    
}
注意:每碰到一個{,就來個tab退格

常量

  1. 1,2,3,4:整形常量
  2. 'a','b','c':字符常量
  3. 1.2,2.3:浮點常量
  4. "hello world":字符串常量
  5. 0xfff321:地址常量
  6. 常量的特點:
    • 常量不會改變
    • 常量不能作為左值
    • 0,const(只讀常量),define(宏常量)

變量

  1. 變量的特點
    • 可以改變的量
    • 可以作為左值,也可以作為右值
  2. 變量的定義
    • 在shell腳本里:變量名=值
    • 在C語言里十?dāng)?shù)據(jù)類型加變量名
    • 同時定義多個同類型變量:數(shù)據(jù)類型 變量a,變量b;
  3. 數(shù)據(jù)類型
    • 整形數(shù)據(jù)類型:int
    • 字符型數(shù)據(jù)類型:char
    • 浮點型:float(單精度),double雙精度()
    • 數(shù)據(jù)類型的作用
      1. 標(biāo)志著后面的變量具體是接受什么類型的值
      2. 這個變量再內(nèi)存中占幾個字節(jié)
      int:4
      char:1
      float:4//float是精確到
      double:8//double是精確到 
      
  4. 整形變量
    • int value=1;
    • int value;value=1;
  5. 字符變量
    • char ch='c'
    • char ch;ch='d'
  6. 浮點變量
    • float f1=1.2
    • float f2=1.4
  7. 變量的使用
    • int value;value=8;

標(biāo)識符的規(guī)范

  1. 硬性規(guī)范:
    1. 不能用數(shù)字開頭
    2. 不能與C語言關(guān)鍵字相同
    3. 只能由字母下劃線和數(shù)字組成
  2. 建議規(guī)范
    1. 不能用拼音,多查字典
    2. 盡量使用駝峰命名法numOfStudent,num_of_student
    3. 見名知義

地址

  • 內(nèi)存:字節(jié):Byte式計算機存儲的最小單位
  • 1M=1024KB;1KB=1024Byte;1Byte=8bit
  • 地址:地址是每一個字節(jié)所對應(yīng)的編號
  • (中國===>家庭(屋子)===>門牌號)
  • (計算機===>字節(jié)===>地址)

進(jìn)制

  1. 二進(jìn)制:0~1
  2. 八進(jìn)制:0~7
  3. 十進(jìn)制:0~9
  4. 十六進(jìn)制:
    • 0~15:0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f。
    • 0X開頭

大端小端存儲法

  • 小端法存儲:低位上的數(shù)存儲在低的地址所對應(yīng)的字節(jié)里。hston
  • 大端法存儲:低位上的數(shù)存儲在高的地址所對應(yīng)的字節(jié)里。hntos
  • 用處:用于網(wǎng)絡(luò)傳輸內(nèi)容的時候。

打印特殊字符

- 如何打印"":printf("\"abc\"\n");
- 如何打印'':printf("'abc'\n");
- 如何打印%:printf("%%");
- 如何打印\:printf("\\");

字符與ASCll碼

  • 字符是一個特殊的整形,只占8位
  • 記住的字符
int main()
{
    char ch='a';
    printf("ch=%d\n",ch);
    //'2'+'2'=100='d'
}
'\0'=0
'0'=48
' '=32
'A'=65
'a'=97
  • 全球停用編碼:unicode編碼

scanf(scan formatter:格式化輸入函數(shù))

  • scanf("%d",&a);//&a:取a變量的地址
  • scanf后面必須是取某個變量的地址
  • 一個變量必須先定義出來再進(jìn)行scanf
  • scanf("%d%d",&a,&b);
  • scanf后面不要加\n。

getchar()與putchar()

int main()
{
    char ch;
    ch=getchar();
    putchar(ch);
}
輸入字符可以直接輸出。

數(shù)據(jù)類型轉(zhuǎn)換

  • 隱式轉(zhuǎn)換:精度小的====>精度大的
    • char====>short int====>float====>double
  • 強制類型轉(zhuǎn)換:(type)變量
int a=9;
int b=8;
float c=(float)a/b;//強制轉(zhuǎn)換的是a的值,而不是a,所以a還是int類型。

運算符

  • 注意點:計算機只進(jìn)行相同類型數(shù)據(jù)的運算,最后計算出來的結(jié)果也與他們的數(shù)據(jù)類型相同。
float a=9;
int b=8;
float c=a/b;
printf("c=%f",c);//結(jié)果為1.125000
分析:通過隱式轉(zhuǎn)換,將b改為float類型,8.000000,然后計算結(jié)果。
  1. 算數(shù)運算符:+ - * / % ++
    • %后面必須是整數(shù)
    • ++
      • 前綴++
      int a=9;
      int b=++a;//a=a+1,b=a.
      
      • 后綴++
      int a=9;
      int b=a++;//b=aa=a+1.
      
      • 前綴--
      int a=9;
      int b=--a;//a=a-1,b=a.
      
      • 后綴--
      int a=9;
      int b=a--;//b=a,a=a+1.
      
  2. 位運算符
    • |:位或:有1為1
    • &:位與:有0為0
    • ^: 異或: 只要不同就為1
    • ~: 取反:先得補碼再取反
    a=3;
    ~a=-4;
    3:0000 0011
    對補碼取反:1111 1100(此時變?yōu)樨?fù)數(shù))
    反碼為:1111 1011
    原碼為:0000 0100
    
    a=-3;
    ~a=2;
    -3:1000 0011
    碼反:1111 1100
    補碼為:1111 1101
    取反:0000 0010
    原碼:0000 0010
    
  3. 原碼,反碼,補碼
    • 正數(shù)的原碼和反碼補碼相同
    • 負(fù)數(shù)的反碼在原碼的基礎(chǔ)上符號位不變,后面依次取反。負(fù)數(shù)的補碼在反碼基礎(chǔ)上+1
    問題:1+(-1)會得到結(jié)果-2
    數(shù)據(jù)在內(nèi)存中是以數(shù)據(jù)的補碼存在
    數(shù)據(jù)是以補碼存在,原碼輸出。
    
  4. 左移<<
a=3;
b=a<<2;//b=12
0000 0011
0000 1100
b=a>>2;//b=0
0000 0011
0000 0000
a=-3
b=a<<2;//b=-12
1000 0011
1111 1100
1111 1101
1111 0100
1111 0011
1000 1100
a=-3
b=a>>2;//b=-1
1000 0011
1111 1100
1111 1101
1111 1111
1111 1110
1000 0001
  1. ch的范圍
    • -128~127
    char ch=127;可以正常輸出
    char ch=128;輸出為-128//1000 0000 默認(rèn)為-128
    char ch=129;輸出為-127.
    

小結(jié):總的來說大部分知識都聽過,但是在最下面講的計算機都是以補碼的形式計算,原碼輸出,二進(jìn)制進(jìn)行存儲的。這一點以前雖然知道但沒細(xì)究,所以這次計算過了一次~運算突然發(fā)現(xiàn)自己以前計算的方式有點錯誤,以前3取反我算到1111 1100時根本沒想到會變成負(fù)數(shù),所以多了一步負(fù)數(shù)轉(zhuǎn)原碼的過程。總的來說,還是學(xué)到了新的知識。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容