欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

初始C語言(操作符詳解)-創(chuàng)新互聯(lián)

點擊查看簡單基礎版操作符介紹

成都創(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文章目錄
  • 1.??算術操作符
  • 2.??賦值操作符
  • 3.??關系操作符
  • 4.??單目操作符
  • 5.??條件操作符(三目操作符)
  • 6.??位操作符(操作數(shù)只能是整數(shù))
    • 6.1 前情提要
        • 【1】進制
        • 【2】2進制三種表現(xiàn)形式解析
        • 【3】unsigned和signed
    • 6.2 &按位與
    • 6.3 | 按位或
    • 6.4 ^按位異或
  • 7.??移位操作符(操作數(shù)只能是正整數(shù))
  • 8.??邏輯操作符
  • 9.??逗號表達式
  • 10.??表達式求值
    • 10.1 表達式求值的順序
    • 10.2 類型轉(zhuǎn)換
      • 【1】隱性類型轉(zhuǎn)換
      • 【2】尋常算術轉(zhuǎn)換

1.??算術操作符
  • 加法(+)、減法(-)、乘法(*):計算和正常的數(shù)學運算一樣,整數(shù)和小數(shù)都沒有任何問題
  • 除法(/):
    • 兩個操作數(shù)都是整數(shù),執(zhí)行整數(shù)除法,如果有一個是浮點類型的,就執(zhí)行浮點數(shù)除法
    • 除數(shù)是不能為0的
  • 取余(%)兩邊只能放整數(shù)
2.??賦值操作符
  • 簡單賦值
    • = ? ???????a = 3;????????把3賦值給a
  • 運算之后再賦值(復合賦值符)
    • 理解:+=???????a+=3;????????a+3后的值再賦給a,相當于a = a + 3;
    • +=、-=、*= 、/=、%=、>>=、<<=、&=、|=、^=
3.??關系操作符
  • 判斷大小
    • < 小于??????>大于??????>=大于等于??????<=小于等于
  • 判斷是否相等
    • ==相等??????!=不等
4.??單目操作符
  • ! 反邏輯操作符
    • 會把真的變成假,假的變成真
      • 補充,布爾類型(C99中引入,部分編譯器支持,包括VS2019)-----表示真假的類型
#include  //頭文件
_Bool flag = true;        //賦值,賦值的選項只有true和false兩種選擇
_Bool flag = false;

return false;         //返回的也只有這兩種選項
  • 前后置++/- -
    • 前后置的區(qū)別就是,是先使用還是先變化
    • 比如前置++就是先自增1,再使用加過后的這個變量的值
    • 會有副作用:會作用于自身
#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ù)值的,也就是所是不會作用于自身的

  • &取地址和*解引用
    • &取地址就是把某一個變量的地址取出來
    • *解引用就是根據(jù)地址去找那個變量從而直接修改變量的值
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";     //這個是字符串字面量,傳進去的是首個元素的地址
  • sizeof操作數(shù)的類型長度(以字節(jié)為單位)———可以求變量(類型)所占空間的大小
  • 返回的是無符號的整型(unsigned int)
    【1】數(shù)組和一般變量
    😊大小計算以及一些是否可以省略括號的問題:
#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;
}
  • 下標引用操作符[ ]
    • 在一個數(shù)組里面要訪問某一個元素就要用這個
    • 如arr[10],訪問的是在arr數(shù)組中,下標為9的元素,操作數(shù)是arr和10
  • 函數(shù)調(diào)用操作符
    • strlen(“abcdef");??????操作數(shù)是strlen和"abcedf",即第一個是操作數(shù)是函數(shù)名,剩余的操作數(shù)就是傳遞給函數(shù)的參數(shù)
    • 函數(shù)調(diào)用操作符,最少有一個操作符,即函數(shù)里面沒有參數(shù)的時候
  • 結構體訪問操作符
    • 結構體變量.成員名
    • 結構體指針->成員名
#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;
}
  • ~ 取反操作符:包括符號位都要取反
  • +正值(基本沒什么用)
  • -負值,把正數(shù)改成負數(shù),負數(shù)改成正數(shù)
  • (類型)強制類型轉(zhuǎn)換
#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:表達式3

如果表達式1成立,就輸出表達式2的結果,如果表達式1不成立,就輸入表達式3的結果

6.??位操作符(操作數(shù)只能是整數(shù)) 6.1 前情提要 【1】進制

位操作符,這個位究竟是什么?------二進制位

計算機中有許多進制的位,如常見的二進制、八進制、十六進制等,我們看到的數(shù)值往往是以十進制的形式展現(xiàn)的,每一個數(shù)值可以用不同的進制表示,如

1111——二進制位??????????????????表示的都是一個數(shù)。表現(xiàn)形式不同罷了
17——八進制位
15——十進制位
F——十六進制位

【2】2進制三種表現(xiàn)形式解析

而計算機中二進制的表現(xiàn)形式一共有三種:原碼、反碼、補碼

  • 原碼就是根據(jù)數(shù)值的大小和正反直接寫出的32位或者64位二進制
    原碼的最高位是符號位,如果是0就表示是正數(shù),如果是1就表示是負數(shù)
  • 反碼就是原碼除了符號位,其他位按位取反
  • 補碼就是反碼+1

正數(shù)(包括0)的原碼、反碼、補碼相同,負數(shù)的則需要計算

內(nèi)存中存的是補碼,所以移位什么的,移的是補碼。

打印是按原碼來

【3】unsigned和signed

unsigned:整數(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.??表達式求值

在這里插入圖片描述

在這里插入圖片描述
在這里插入圖片描述

10.1 表達式求值的順序

?如何判斷計算順序【注意:相鄰的概念】

  • 首先確定優(yōu)先級,相鄰操作符按照優(yōu)先級高低計算
  • 然后優(yōu)先級相同的情況下,結合性才會起作用
  • 最后看是否控制求值順序

?一些問題表達式

雖然通過上述方法可以確定計算順序,但是這個計算順序并不是唯一的,下面介紹一些問題表達式

第一種
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中
  • 概況
    • b和c先被提升為普通整型,然后再執(zhí)行加法運算
    • 執(zhí)行完加法運算之后,結果將被截斷,然后被存儲到a中
  • 如何被提升為普通整型
    • a為1,而且是char類型只有8個比特位,寫成2進制的補碼是00000001,整型提升之后,因為是有符號的char,高位補充符號位0,即000000000000000000000001
    • b為-1,補碼是11111111,因為是有符號的char,高位補充符號位1,所以結果是11111111111111111111111111111111
【2】尋常算術轉(zhuǎn)換

?使用場景:某個操作符的各個操作數(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)

商城網(wǎng)站建設