1 編譯型和解釋型語言的區(qū)別
a執(zhí)行效率
b平臺無關(guān)性
2 gcc -E/-S/-C/-O 參數(shù)的意義
gcc -E 預(yù)處理:進(jìn)行預(yù)處理
gcc -S 編譯:將代碼翻譯成匯編語言
gcc -C 匯編:將匯編文件轉(zhuǎn)換為二進(jìn)制目標(biāo)代碼
gcc -O 鏈接:生成可執(zhí)行文件
3 求余與除法
-7/3 = -2 因?yàn)?2*3 = -6。 -6+(-1) = -7迎膜。因此取余為-1
同理可知7%-3 = 1畔况。
可總結(jié)出取余的正負(fù)與被除數(shù)相同
-7/3=-2 -7%3=-1
7/-3=-2 7%-3=1
4 不用第三方變量進(jìn)行數(shù)據(jù)交換
方法一:
#include<stdio.h>
int mian()
{
int a = 10, b = 5;
a = a + b;
b = a - b;
a = a - b;
printf("a = %d b = %d",a,b);
return 0;
}
方法二:
#include<stdio.h>
int mian()
{
int a = 10, b = 5;
a = a ^ b;
b = a ^ b;
a = a ^ b;
printf("a = %d b = %d",a,b);
return 0;
}
5補(bǔ)碼演训。。查看書籍《編碼》
個(gè)人理解:
首先要理解一個(gè)原則犹芹,數(shù)據(jù)定義后如果不去修改它的話惋砂,其在內(nèi)存中是以補(bǔ)碼的形式存在的,并且該補(bǔ)碼數(shù)值不會更改牧抵。
unsigned int a = -1
一旦聲明 -1 就以 int 型的形式將-1 的補(bǔ)碼存儲在內(nèi)存中笛匙,而內(nèi)存中這個(gè)值是不變的侨把, 就看編譯器如何去解讀犀变。比如,此次我們都將 -1 的補(bǔ) 碼以unsigned int類型去解釋秋柄。我們知道int 型的 -1 在內(nèi)存中是以補(bǔ)碼存儲的获枝,其補(bǔ)碼為
1111 1111 1111 1111 1111 1111 1111 1111
如果我們以int去解釋這個(gè)補(bǔ)碼的話,該補(bǔ)碼對應(yīng)的int 值就是 -1
如果我們以unsigned int 去解釋這個(gè)補(bǔ)碼的話骇笔,該補(bǔ)碼對應(yīng)的就不是 -1了省店,而是二進(jìn)制的 1111 1111 1111 1111 1111 1111 1111 1111 這將是很大的一個(gè)數(shù)。
因此printf("a = %u\n",a);
將輸出4294967295笨触,即上面的二進(jìn)制轉(zhuǎn)換為十進(jìn)制的值
當(dāng)執(zhí)行printf("a + b = %d\n",a+b);
時(shí)懦傍,a + b
不同類型的數(shù)據(jù)要進(jìn)行運(yùn)算時(shí),會進(jìn)行隱式轉(zhuǎn)換芦劣,將 a 隱式轉(zhuǎn)換成 int 型粗俱,即以int型去解釋a,此時(shí) a 的值即為-2虚吟。故 a + b = -2 +2 =0寸认。因此,輸出為0
#include <stdio.h>
int main(int argc, char *argv[])
{
unsigned int a =-1;
int b = 1;
printf("a = %u\n",a);
printf("b = %u\n",b);
printf("a + b = %d\n",a+b);
return 0;
}
下面這條語句將輸出129.因?yàn)?127在計(jì)算機(jī)中是以補(bǔ)碼 1000 0001形式存儲的串慰。將它強(qiáng)制轉(zhuǎn)換為unsigned char偏塞,則其對應(yīng)的值為129.因此%d輸出為129
printf("%d\n",(unsigned char)(-127));
下面這兩條語句輸出結(jié)果都是4294967295
printf("%u\n",(unsigned int)(-1));
printf("%u\n",-1);
下面這兩條語句都輸出-1,格式化輸出 ,
后面表示該數(shù)據(jù)類型是什么邦鲫,要從該數(shù)據(jù)的其實(shí)指針去讀多少個(gè)字節(jié)灸叼。而格式化輸出%d或%u等表示以什么樣的形式去解讀這些字節(jié)。
printf("%d\n",(unsigned int)(-1));
printf("%d\n",-1);
下面這條語句的輸出為
-129
4294967167
#include<stdio.h>
int main()
{
int a = -129;
printf("%d\n",(unsigned int )(a));
printf("%u\n",a);
}
6轉(zhuǎn)義字符
printf("\\= %d \\ = %d",'\\','\\');//輸出 \= 92 \ = 92
printf("\"= %d \" = %d",'"','\"');//輸出 "= 34 " = 34