點擊查看簡單基礎版操作符介紹
成都創(chuàng)新互聯(lián)公司是一家專注于做網(wǎng)站、網(wǎng)站設計與策劃設計,岷縣網(wǎng)站建設哪家好?成都創(chuàng)新互聯(lián)公司做網(wǎng)站,專注于網(wǎng)站建設十年,網(wǎng)設計領域的專業(yè)建站公司;建站業(yè)務涵蓋:岷縣等地區(qū)。岷縣做網(wǎng)站價格咨詢:18980820575文章目錄#include //頭文件
_Bool flag = true; //賦值,賦值的選項只有true和false兩種選擇
_Bool flag = false;
return false; //返回的也只有這兩種選項
#includeint main()
{int a = 10;
int b = ++a; //b = 11 a = 11
int c = a + 1; //c = 11 a = 10
return 0;
}
a+1和++a都可以實現(xiàn)打出這個數(shù)+1的效果,但是a+1是不會改變a本身的數(shù)值的,也就是所是不會作用于自身的
int a = 3;
int* pa = &a;
*pa += 3; //*pa相當于a
printf("%d\n", *pa);
printf("%d\n", a); //因為是作用在a上的值修改,所以可以直接打印a
*(int *)地址——————指針是不能強制轉(zhuǎn)換的,,相當于入室盜竊,不可取
char* p = "abcdef"; //這個是字符串字面量,傳進去的是首個元素的地址
#includeint main()
{int a = 3;
int arr[10];
printf("%d", sizeof(a)); //ok
printf("%d", sizeof(int)); //ok
printf("%d", sizeof(arr)); //ok
printf("%d", sizeof(int [10])); //ok
printf("%d", sizeof a); //ok //如果是求變量的大小,可以省略括號
//printf("%d", sizeof int); //error //如果是求類型的大小,則不能省略括號
return 0;
}
😊sizeof的特點
#includeint main()
{int a = 0;
short s = 5;
printf("%d\n", sizeof(s = a + 3)); //a+3是整型4個字節(jié),放在短整型2個字節(jié)里面會發(fā)生截斷
printf("%d\n", sizeof(s)); //sizeof內(nèi)部的表達式不計算,s未被賦值,依舊是5
return 0;
}
【2】sizeof和數(shù)組
😊大小計算
#includevoid test1(int arr[])
{printf("%d\n", sizeof(arr)); //4、8
}
void test2(char* ch[])
{printf("%d\n", sizeof(ch)); //4、8,因為接收的是地址,指針變量的大小要么4要么8,取決是32位還是64位環(huán)境
}
int main()
{int arr[10] = {0 };
char ch[10] = {0 };
printf("%d\n", sizeof(arr)); //輸出40,計算的是整個數(shù)組的大小
printf("%d\n", sizeof(ch)); //輸出10,計算的是整個數(shù)組的大小
test1(arr);
test2(ch);
return 0;
}
#includestruct book
{ //如何創(chuàng)建一個類型
char name[10];
char author[10];
int price;
};
int main()
{struct book b1 = {"《活著》","余華",45 };
struct book* pb = &b1;
printf("%s %s %d\n", b1.name, b1.author, b1.price);
printf("%s %s %d\n", (*pb).name,(*pb).author, (*pb).price); //用指針
printf("%s %s %d\n", pb->name, pb->author, pb->price);
return 0;
}
#includeint main()
{int a = 3.14; //3.14是浮點型,放到整型里面會丟失數(shù)據(jù),但非要放就需要強制類型轉(zhuǎn)換
printf("%d",a); //printf和scanf是以某種格式輸出/輸入的意思,不需要強制類型轉(zhuǎn)換,已經(jīng)自身帶領隱性的意味了
return 0;
}
5.??條件操作符(三目操作符)如果表達式1成立,就輸出表達式2的結果,如果表達式1不成立,就輸入表達式3的結果
6.??位操作符(操作數(shù)只能是整數(shù)) 6.1 前情提要 【1】進制位操作符,這個位究竟是什么?------二進制位
計算機中有許多進制的位,如常見的二進制、八進制、十六進制等,我們看到的數(shù)值往往是以十進制的形式展現(xiàn)的,每一個數(shù)值可以用不同的進制表示,如
1111——二進制位??????????????????表示的都是一個數(shù)。表現(xiàn)形式不同罷了
17——八進制位
15——十進制位
F——十六進制位
而計算機中二進制的表現(xiàn)形式一共有三種:原碼、反碼、補碼
- 原碼就是根據(jù)數(shù)值的大小和正反直接寫出的32位或者64位二進制
原碼的最高位是符號位,如果是0就表示是正數(shù),如果是1就表示是負數(shù)
- 反碼就是原碼除了符號位,其他位按位取反
- 補碼就是反碼+1
正數(shù)(包括0)的原碼、反碼、補碼相同,負數(shù)的則需要計算
內(nèi)存中存的是補碼,所以移位什么的,移的是補碼。
打印是按原碼來
【3】unsigned和signedunsigned:整數(shù)在內(nèi)存中以二進制的補碼存儲,最高位為符號位,這個可以實現(xiàn)最高位成為計算位,不是符號位——————無符號位
signed:因為是默認數(shù)值存儲時有符號位的,所以基本省略掉了——————有符號位
6.2 &按位與對應的二進制位有0,則為0,除非兩個數(shù)都是1,才為1
6.3 | 按位或對應的二進制位,有1就為1,除非兩個數(shù)都是0,才為0
6.4 ^按位異或對應的二進制位,相同為0,相異為1
7.??移位操作符(操作數(shù)只能是正整數(shù))左移操作符:左邊拋棄,右邊補0
右移操作符:左邊用原該位的符號位填充,右邊丟棄
int a = 1<<4; //把1向左移動4位的數(shù),賦值給a //左移操作符
int b = 1>>4; //把1向右移動4位的數(shù),賦值給b //右移操作符
int num = 10;
int b = num<<1; //num本身的值沒有被改變
8.??邏輯操作符&& 邏輯與?????||邏輯或
區(qū)分:& 按位與?????|按位或
特點(坑點):
&&操作符:左邊為假,右邊無須計算
||操作符:左邊為真,右邊無須計算
邏輯操作符可以產(chǎn)生短路的效果
9.??逗號表達式形式:表達式1,表達式2,表達式3……表達式n
含義:用逗號隔開的多個表達式
特點:從左向右依次執(zhí)行,整個表達式的結果就是最后一個表達式的結果
#includeint main()
{int a = 1;
int b = 2;
int c = 0;
if (a = b + 1, c = a / 2, b >0) //依次執(zhí)行,前面如果有涉及值的修改,也會影響判斷部分,真正起到判斷部分的,是最后一個表達式,即b>0
{printf("大悲咒");
}
return 0;
}
10.??表達式求值?如何判斷計算順序【注意:相鄰的概念】
?一些問題表達式
雖然通過上述方法可以確定計算順序,但是這個計算順序并不是唯一的,下面介紹一些問題表達式
第一種
a* b + c * d + e * f; 優(yōu)先級只能確定相鄰操作符的順序,無法確定第三個*是否比第一個+早執(zhí)行
第二種
c + --c; 無法確定c是什么時候準備好的,是在減減前就準備好了
第三種 非法表達式
#includeint main()
{int i = 10;
i = i-- - --i * (i = -3) * i++ + ++i;
printf("i = %d\n", i);
return 0;
}
第四種
#includeint fun()
{static int count = 1;
return ++count;
}
int main()
{int answer;
answer = fun() - fun() * fun(); //只能確定先算乘法,再算減法,但是函數(shù)的調(diào)用順序是無法確定的
printf("%d\n", answer);
return 0;
}
😊總結
優(yōu)先級高并不代表表達式執(zhí)行順序優(yōu)先,就像a+f+bc,它可以是先a+f再加bc,它也可以先a+f再加bc,也可以是bc再加a。
沒法確定唯一計算路徑的就是問題表達式,我們要通過括號去避免
10.2 類型轉(zhuǎn)換 【1】隱性類型轉(zhuǎn)換為什么會出現(xiàn)隱性類型轉(zhuǎn)換這種情況?
?因為表達式的整型運算要在CPU的整型運算器里面進行,而里面運算的操作數(shù)的字節(jié)長度一般是整型的字節(jié)長度。
即C語言的整數(shù)算術運算默認是以整型類型的精度來進行的
?但是字符和短整型的字節(jié)長度是小于int類型的,為了達到上述所提到的要求,就需要進行整型提升,即在執(zhí)行運算前,要把把字符類型、短整型轉(zhuǎn)化成int類型或者unsigned int類型后,才送去CPU執(zhí)行運算操作
隱性類型轉(zhuǎn)換是如何進行的
char a = 1; b和c先被提升為普通整型,然后再執(zhí)行加法運算
char b = -1;
a = b + c; 執(zhí)行完加法運算之后,結果將被截斷,然后被存儲到a中
?使用場景:某個操作符的各個操作數(shù)屬于不同的類型
?解決方法:其中一個操作數(shù)的轉(zhuǎn)換為另一個操作數(shù)的類型,否則操作(運算)無法進行
- ong double
- double
- float
- unsigned long int
- long int
- unsigned int
- int
?具體:排名較低的那個類型要首先轉(zhuǎn)換為另外一個操作數(shù)的類型后執(zhí)行運算
????就高不就低
?轉(zhuǎn)換要合理,如果你強行給整型類型賦上一個浮點數(shù),會發(fā)生精度的丟失
你是否還在尋找穩(wěn)定的海外服務器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機房具備T級流量清洗系統(tǒng)配攻擊溯源,準確流量調(diào)度確保服務器高可用性,企業(yè)級服務器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧
網(wǎng)站欄目:初始C語言(操作符詳解)-創(chuàng)新互聯(lián)
URL標題:http://chinadenli.net/article26/dhgcjg.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站內(nèi)鏈、品牌網(wǎng)站設計、域名注冊、網(wǎng)站維護、外貿(mào)建站、品牌網(wǎng)站制作
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容