最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

關(guān)于C語言操作符的那些事(超級(jí)全)

 更新時(shí)間:2021年08月02日 09:32:32   作者:呋喃吖  
這篇文章主要給大家介紹了關(guān)于C語言操作符的那些事兒,c語言的操作符有很多,包括算術(shù)操作符、移位操作符、位操作符、賦值操作符、單目操作符、關(guān)系操作符、邏輯操作符、條件操作符、逗號(hào)表達(dá)式、下標(biāo)引用、函數(shù)調(diào)用和結(jié)構(gòu)成員,需要的朋友可以參考下

前言

C語言中操作符不多,但是有些相同的操作符都是在不同的表達(dá)式中,有不同的解釋意思,比如 * 號(hào),在表達(dá)式中5*5表示乘號(hào),在int *p表示指針,在 *p = 10中,又表示解引用,所以今天就來詳細(xì)的整理一下C語言中的操作符,做到心中有數(shù),可以一眼識(shí)破,用途有哪些。重點(diǎn)不是記憶:是理解,兄弟們,要?jiǎng)颖举|(zhì)。

操作符的分類

注意:以下操作符都必須是英文的半角符號(hào)。

算術(shù)操作符 + *  /  %
移位操作符 << 左移操作符 >> 右移操作符
位操作符 &按位與  ^ 按位異或 ?。次换?/td>
賦值操作符 =?。健。健。健。健。Γ健。健 。蓿?/td>
單目操作符 ! 邏輯反操作 - 負(fù)值 + 正值 & 取地址 sizeof 操作數(shù)的類型長度(以字節(jié)為單位) ~ 對(duì)一數(shù)的二進(jìn)制按位取反 -- 前置、后置-- ++前置 后置++
關(guān)系操作符 >?。肌。迹健。荆健?= !=
邏輯操作符 &&邏輯與?。壿嫽?/td>
條件操作符 exp1 ? exp2 : exp3
逗號(hào)表達(dá)式 exp1, exp2, exp3, …expN
下標(biāo)引用 [ ] 下標(biāo)引用操作符
函數(shù)調(diào)用 ( )
結(jié)構(gòu)成員 . 結(jié)構(gòu)體.成員名 -> 結(jié)構(gòu)體指針->成員名

算術(shù)操作符

+ 加; -減; *乘; /除;%取余(取模);

+ - * 沒什么好說的,大家都會(huì)用。

👀來看看這個(gè) / 號(hào);

❓問:下面代碼的 a = ?

double b = 9 /2;
printf("%lf",b);

答:結(jié)果為4;不是4.5;在C語言中:對(duì)于 / (➗除號(hào)來說),執(zhí)行的是整數(shù)除法。

對(duì)于:/ (➗除號(hào)),執(zhí)行的是整數(shù)除法,這句話的深度理解;

❓問:下面代碼的 b = ?

double b = 9 /2;
printf("%lf",b);

答:結(jié)果為:4.000000;這說明,對(duì)于 / 來說,執(zhí)行的是整數(shù)除法,類型與它無關(guān);

❓問:假如要得到小數(shù)的除法如何得到呢?

答:只要操作符 / (➗除號(hào)) 兩邊的操作數(shù),只要有一個(gè)操作數(shù)為浮點(diǎn)數(shù)(小數(shù)),即執(zhí)行的為浮點(diǎn)數(shù)除法,即得到的值為小數(shù);

double a = 9 / 2.0;
double b = 9.0 /2.0;
double c = 9.0 / 2.0;

a b c的結(jié)果都是小數(shù):4.5

👀來看看取模操作符 %:

取模也就是取余,一個(gè)數(shù)對(duì)另一個(gè)數(shù)取余就是得到這個(gè)數(shù)的余數(shù):

int a = 9 % 4;

a 的結(jié)果為 1;就是 9除4 余數(shù)為1的結(jié)果:

有個(gè)記憶小技巧取??梢韵胂蟪蔀橐恢蹦サ粢粋€(gè)數(shù)磨到不能再磨為止;比如:9 % 2,可以想象為 9 磨掉 2,在磨掉 2,再 磨掉 2,再 磨掉 2,剩下 1,磨不了了,結(jié)果就為1了。

注意:取模操作符%,兩邊的操作數(shù)必須為整數(shù);下面,不為整數(shù)會(huì)報(bào)錯(cuò);

移位操作符

>> 左移操作符 和 << 右移操作符;

計(jì)算方式:

左移操作符就是左邊丟棄,右邊補(bǔ)0;

右移操作符分兩種:

  1.  邏輯右移:右邊丟棄,左邊補(bǔ)0;不管是不是正數(shù)還是負(fù)數(shù)(作為了解即可)
  2. 算術(shù)右移:右邊丟棄,左邊看是負(fù)數(shù)還是正數(shù),負(fù)數(shù)補(bǔ)上1,負(fù)數(shù)補(bǔ)上0;(幾乎所有編譯器都是按照這種方式計(jì)算)

注意

移位操作符,操作的都是二進(jìn)制的數(shù)。

并且操作數(shù)都是整數(shù),且右操作數(shù)不能位負(fù)數(shù)(了解即可)

👀看看左移操作符 <<:

❓問:下面代碼的 b = ?

int a = 5;
int b = a<<1;
printf("%d",b);
結(jié)果為:10;

分析分析:a 是整數(shù),在內(nèi)存中以補(bǔ)碼的形式存儲(chǔ),正數(shù)的補(bǔ)碼和源碼時(shí)一致的,a 是 int 類型,占四個(gè)字節(jié);如下圖:

❓問:下面代碼的 b = ?

int a = -1;
int b = a<< 1;
printf("%d",b);
結(jié)果為:-2;

分析圖如下:

👀看看右移操作符>>

右移操作符,我們見到的都是屬于算術(shù)右移,因?yàn)?,?duì)于計(jì)算機(jī)的整數(shù)來說,分為,正數(shù)和負(fù)數(shù),正數(shù)和負(fù)數(shù)的區(qū)分是通過高位的第一個(gè)位來區(qū)分的,0,表示正數(shù),1表示負(fù)數(shù);所以在執(zhí)行有一操作符時(shí)候>>,需要判斷右邊補(bǔ)上的是0還是1,這是根據(jù)你要操作的是負(fù)數(shù)還是正數(shù)決定的。

❓問:下面代碼的 b = ?

這是正數(shù)情況:

int a = 5;
int b = a>> 1;
printf("%d",b);
結(jié)果:b= 2

❓問:下面代碼的 b = ?

int a = -1;
int b= a>>1;
printf("%d",b);

結(jié)果為:b = -1;

分析圖如下:

總結(jié):

m左移n位的結(jié)果:就是m × 2n;

m右移n位的結(jié)果:就是 m / 2n;

位操作符

  • &按位與
  • | 按位或
  • ^按位異或

注意:他們的操作數(shù)必須是整數(shù)的二進(jìn)制數(shù)。

計(jì)算方式

  • &按位與 ,位數(shù)都為1,結(jié)果才為1,其他情況為0;
  • |按位或 ,位數(shù)只要有一個(gè)為1,結(jié)果就為1,全為0結(jié)果才為0;
  • ^按位異或,位數(shù)不同就為1,相同就為0;

👀看看&按位與:

❓問:下面代碼的 c = ?

int a = 5;
int b = -2;
int c = a&b;
printf("%d",c);

結(jié)果為:c = 4

分析圖:

👀看看|按位或:

❓問:下面代碼的 c = ?

int a = 4;
int b = -2;
int c = a|b;
printf("%d",c);

結(jié)果為:c = -2

分析圖如下:

👀看看^按位異或:

❓問:下面代碼的 c = ?

int a = 5;
int b = -2;
int c = a^b;
printf("%d",c);

結(jié)果:c = -5

分析圖如下:

❓問:位操作符有什么作用呢?

答: 可以計(jì)算一個(gè)數(shù)的二進(jìn)制補(bǔ)碼中有多少個(gè)1
假如有個(gè)變量a ,而 a&1 就可以得到a的最后一位是0還是1;
如果要得到a 的二進(jìn)制一共有多少個(gè)1,可以讓 a右移后,a>>1,得到的結(jié)果繼續(xù)與 1 按位與 a&1,用一個(gè)變量加循環(huán)就可以統(tǒng)計(jì) a 中有多少個(gè)1;

如下代碼:

	int a = 15;
	int count = 0;
	int ret = 0;
	int i = sizeof(int)*8;
while(i > 0)
{
	ret = a & 1;
	if(ret == 1)
		count++;
	a = a>>1;
	i--;
}
printf("count = %d",count);

異或操作符還可以用于:不用創(chuàng)建第三個(gè)變量交換兩個(gè)整數(shù)

int a = 5;
int b = 6;
a = a^b;
b = a^b;
c = c^b;
printf("a = %d,b = %d ",a, b);

結(jié)果位: a = 6;b  =5;

賦值操作符

賦值操作符是一個(gè)很棒的操作符,他可以讓你得到一個(gè)你之前不滿意的值。也就是你可以給自己重新賦值。

+= -= *= /= ``%= >>= <<= ``&= |= ^=

其實(shí)這個(gè)操作符很簡單,基本沒什么可以講的,所以就跳過了;

單目操作符

! 邏輯反操作
- 負(fù)值
+ 正值
& 取地址
sizeof 操作數(shù)的類型長度(以字節(jié)為單位)
~ 對(duì)一個(gè)數(shù)的二進(jìn)制按位取反
-- 前置、  后置--  ++ 前置、  后置++
* 間接訪問操作符(解引用操作符)
(類型) 強(qiáng)制類型轉(zhuǎn)換

👀來看看! 邏輯反操作 :

就是把一個(gè)數(shù)按邏輯變?yōu)?0 或者 1;得到的結(jié)果為bool值.

int a =5;
a = !a;
printf("a = %d",a);

int b = 0;
b = !b;
printf("b = %d",b);

結(jié)果:a = 0;b=1;

👀來看看 :& 取地址,* 間接訪問操作符(解引用操作符) :

& 取地址,是取出變量的地址,如果對(duì)數(shù)組名取地址,則取出的是整個(gè)數(shù)組的地址;

* 間接訪問操作符(解引用操作符) ,在定義時(shí)候 * 表示變量是指針,在使用的時(shí)候, * 表示指針指向的變量。

int a = 10;&a 得到的是 a 的地址

int * p = &a;這里的* 表示 p是一個(gè)指針變量;

*p = 20;這里的*表示指針p所指向的變量a
//
//
int arr[10]={0};

&arr ,得到的是整個(gè)數(shù)組的地址;

sizeof(&arr)得到的值為 40個(gè)字節(jié),這里&arr,表示整個(gè)數(shù)組的字節(jié)大小

sizeof(arr)得到的是 4個(gè)字節(jié),這里的數(shù)組名為數(shù)組首元素的地址,地址為4個(gè)字節(jié)大?。?

👀來看看 :sizeof 操作數(shù)的類型長度(以字節(jié)為單位) :

  1. 首先必須認(rèn)識(shí),sizeof 不是函數(shù),函數(shù)只能用函數(shù)調(diào)用符號(hào)(),來調(diào)用,而 sizeof,是不需要調(diào)用符號(hào)也可以使用的,
  2. sizeof(),計(jì)算的是括號(hào)里面的變量或者類型的字節(jié)大小,與存放的數(shù)據(jù)無關(guān);
  3. sizeof(),括號(hào)內(nèi)的表達(dá)式,不參與計(jì)算,括號(hào)內(nèi)的表達(dá)式在編譯階段就已經(jīng)定好了。
int a = 10;
char arr[10] = "abcdef";
printf("%d",sizeof(a)); //結(jié)果:4
printf("%d",sizeof(int));//結(jié)果:4
printf("%d",sizeof a);//結(jié)果:4
printf("%d",sizeof(arr));//結(jié)果:10
printf("%d",sizeof(arr[0]));//結(jié)果:4
//
//
int a = 5;
short s = 10;
printf("%d",sizeof(s = a +2));// 這里的值為2,因?yàn)閟的類型為short,
							//s的值為7,但是在編譯階段就確定了,運(yùn)行時(shí)候,不會(huì)改變下面的 s的值 
printf("%d",s);//這里s結(jié)果為:10;

👀來看看 :~ 對(duì)一個(gè)數(shù)的二進(jìn)制按位取反 :

就是對(duì)一個(gè)整數(shù)的二進(jìn)制數(shù)補(bǔ)碼進(jìn)行取反操作

int a = 0;
int b = ~a;
printf("b = %d",b);
結(jié)果:b = -1;

分析圖:

👀來看看 : -- 前置、  后置--  ++ 前置、  后置++

- - 前置減減,就是先減1后使用;++前置加加,就是先加1后使用;

后置- -,就是先使用,后減1;后置++,就是先使用,后加1;

//++和--運(yùn)算符
//前置++和--
#include <stdio.h>
int main()
{
  int a = 10;
  int x = ++a;  //先對(duì)a進(jìn)行自增,然后對(duì)使用a,也就是表達(dá)式的值是a自增之后的值。x為11。

  int y = --a;  //先對(duì)a進(jìn)行自減,然后對(duì)使用a,也就是表達(dá)式的值是a自減之后的值。y為10;

  return 0;
}

//后置++和--
#include <stdio.h>
int main()
{
  int a = 10;
  int x = a++;  //先對(duì)a先使用,再增加,這樣x的值是10;之后a變成11;

  int y = a--;  //先對(duì)a先使用,再自減,這樣y的值是11;之后a變成10;
  return 0;
}

關(guān)系操作符

> <?。迹健。荆健?= !=

其實(shí)就是比較大小,返回的值為bool值,0或者 1;

注意:在編程的過程中== 和=不小心寫錯(cuò),導(dǎo)致的錯(cuò)誤。

邏輯操作符

&& 邏輯與,||邏輯或

邏輯與 && 就是 左右兩邊的操作數(shù)同時(shí)為真,結(jié)果為真;

注意要點(diǎn):當(dāng)最前面的操作數(shù)為假,后面的操作數(shù)就不執(zhí)行了;

邏輯或 || 就是左右兩邊的操作數(shù)只要有一個(gè)為真,就為真;

注意要點(diǎn):當(dāng)最前面的操作數(shù)為真,后面的操作數(shù)就不執(zhí)行了;

來看一道360面試題

❓問:程序輸出的結(jié)果是什么?

#include <stdio.h>
int main()
{
  int i = 0,a=0,b=2,c =3,d=4;
  i = a++ && ++b && d++;
  //i = a++||++b||d++;
  printf("a = %d\n b = %d\n c = %d\nd = %d\n", a, b, c, d);
  return 0;
}

結(jié)果為: a = 1 b =2,c =3 d =4;

分析:

記住邏輯&& 第一個(gè)操作數(shù)為0,后面的表達(dá)式都不用計(jì)算了。

❓問:程序輸出的結(jié)果是什么?

#include <stdio.h>
int main()
{
  int i = 0,a=0,b=2,c =3,d=4;
  i = a++||++b||d++;
  printf("a = %d\n b = %d\n c = %d\nd = %d\n", a, b, c, d);
  return 0;
}

結(jié)果: a = 1 b =3,c=3 d =4;

分析:

邏輯或 | | :當(dāng)最前面的操作數(shù)為真,后面的操作數(shù)就不執(zhí)行了;

條件操作符

exp1 ? exp2 : exp3
exp表示的是表達(dá)式

條件操作符通草用來書寫一些簡單的if else 語句;

如:

if (a > 5)
    b = 3;
else
    b = -3;
轉(zhuǎn)換成條件表達(dá)式,是什么樣?
int b = a > 5 ? 3:-3;
或者:
 a > 5 ? b = 3: b = -3; //不常用

逗號(hào)表達(dá)式

exp1, exp2, exp3, …expN

逗號(hào)表達(dá)式最終的結(jié)果為expN,即逗號(hào)最后一個(gè)表達(dá)式的值;

通常我們?cè)谑褂玫臅r(shí)候,加上括號(hào)(),會(huì)使得代碼可讀性好,如(exp1, exp2, exp3, …expN);

//代碼1
int a = 1;
int b = 2;
int c = (a>b, a=b+10, a, b=a+1);//逗號(hào)表達(dá)式
c是多少?
分析: a>b結(jié)果為 0,a =b+10,結(jié)果為12,b=a+1結(jié)果為 13;所以表達(dá)式化簡為:(0,12,13);所以結(jié)果為 13
結(jié)果:c = 13;

下標(biāo)引用符

[ ]

下標(biāo)引用符就是一個(gè)中括號(hào)的模樣,用于訪問數(shù)組下標(biāo)對(duì)應(yīng)的值。

操作的數(shù)據(jù):一個(gè)數(shù)組名+一個(gè)索引下標(biāo)

int arr[10]; //這是用于定義數(shù)組
arr[9] = 10;//這是使用下標(biāo)引用符訪問數(shù)組

9[arr] 得到的是下標(biāo)索引為9對(duì)應(yīng)的值,深刻理解操作符,9和arr就是[ ]操作符的操作數(shù);

我們要了解數(shù)組名就是首元素的地址;

arr = &arr[0];
所以:arr+1 = &arr[1];
所以*(arr+1)= arr[1];

函數(shù)調(diào)用符

()

函數(shù)調(diào)用符號(hào)就是一個(gè)小括號(hào)

操作數(shù)為:函數(shù)名+參數(shù)列表(參數(shù)列表可以為空)

int test(int x);//這里是聲明函數(shù)的意思
int test(int x)//這里是定義函數(shù)的意思
{

}
test(10);//這里是調(diào)用函數(shù)的意思

結(jié)構(gòu)體調(diào)用操作符

. 和 ->

操作數(shù):自定義的變量 + 自定義類型里面的成員變量,計(jì)算的結(jié)果返回的是右邊操作數(shù)的類型

在C語言中,允許用戶自定義數(shù)據(jù)類型,通過struct關(guān)鍵字去定義:

struct student
{
	char name[20];
	int age;
};

這里自定義了一個(gè)類型為 struct student;里面包含了 name 數(shù)組和 age 變量;假如你要訪問里面的變量的化,你可以通過自定義的類型 定義一個(gè)變量,通過結(jié)構(gòu)體訪問符去訪問。

比如我要訪問 name數(shù)組:

struct student s; //定義的類型 定義一個(gè)變量s
s.name ;//你訪問的就是name數(shù)組

假如你是自定義類型的指針

struct student s;
s->name;//你訪問的就是name數(shù)組

總結(jié)

到此這篇關(guān)于C語言操作符的那些事的文章就介紹到這了,更多相關(guān)C語言操作符內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C語言中strcmp的實(shí)現(xiàn)原型

    C語言中strcmp的實(shí)現(xiàn)原型

    這篇文章主要介紹了C語言中strcmp的實(shí)現(xiàn)原型的相關(guān)資料,這里提供實(shí)例幫助大家理解這部分內(nèi)容,希望能幫助到大家,需要的朋友可以參考下
    2017-08-08
  • 使用Libmicrohttpd搭建內(nèi)嵌(本地)服務(wù)器的方法

    使用Libmicrohttpd搭建內(nèi)嵌(本地)服務(wù)器的方法

    下面小編就為大家?guī)硪黄褂肔ibmicrohttpd搭建內(nèi)嵌(本地)服務(wù)器的方法。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-08-08
  • C++中vector類的一些簡單實(shí)現(xiàn)

    C++中vector類的一些簡單實(shí)現(xiàn)

    C++中的std::vector是一個(gè)動(dòng)態(tài)數(shù)組(也被稱為可變大小數(shù)組)的容器類,它是C++標(biāo)準(zhǔn)庫提供的其中一種容器類,提供了方便的操作和管理動(dòng)態(tài)數(shù)組的功能,本文就給大家介紹了C++中vector類的簡單實(shí)現(xiàn)代碼,需要的朋友可以參考下
    2023-08-08
  • VS2019 Nuget找不到包的問題處理

    VS2019 Nuget找不到包的問題處理

    這篇文章主要介紹了VS2019 Nuget找不到包的問題處理,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-03-03
  • OpenCV中C++函數(shù)imread讀取圖片的問題及解決方法

    OpenCV中C++函數(shù)imread讀取圖片的問題及解決方法

    利用C++函數(shù)imread讀取圖片的時(shí)候返回的結(jié)果總是空,而利用C函數(shù)cvLoadImage時(shí)卻能讀取到圖像。怎么回事?今天小編通過本教程給大家簡單說明原因
    2017-03-03
  • 關(guān)于STL中set容器的一些總結(jié)

    關(guān)于STL中set容器的一些總結(jié)

    關(guān)于set,必須說明的是set關(guān)聯(lián)式容器。set作為一個(gè)容器也是用來存儲(chǔ)同一數(shù)據(jù)類型的數(shù)據(jù)類型,并且能從一個(gè)數(shù)據(jù)集合中取出數(shù)據(jù),在set中每個(gè)元素的值都唯一,而且系統(tǒng)能根據(jù)元素的值自動(dòng)進(jìn)行排序
    2013-09-09
  • c++中的stack和dequeue解析

    c++中的stack和dequeue解析

    這篇文章主要介紹了c++中的stack和dequeue介紹,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-05-05
  • 遞歸形式與非遞歸形式的斐波那契數(shù)列的用法分析

    遞歸形式與非遞歸形式的斐波那契數(shù)列的用法分析

    本篇文章是對(duì)遞歸形式與非遞歸形式的斐波那契數(shù)列的用法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • C語言超詳細(xì)講解猜數(shù)字游戲的實(shí)現(xiàn)

    C語言超詳細(xì)講解猜數(shù)字游戲的實(shí)現(xiàn)

    現(xiàn)在很多游戲都有抽獎(jiǎng)抽卡的功能,其實(shí)這個(gè)就類似于猜數(shù)字,生成一個(gè)隨機(jī)數(shù),然后你去猜,猜對(duì)了就得獎(jiǎng)。猜到一定次數(shù)就會(huì)保底。要實(shí)現(xiàn)猜數(shù)字的小游戲,首先是要讓程序生成隨機(jī)數(shù),這就要用到rand、srand和time這三個(gè)函數(shù),其次要了解時(shí)間戳
    2022-07-07
  • C語言操作XML文件的技術(shù)和方法

    C語言操作XML文件的技術(shù)和方法

    XML因其靈活性和標(biāo)準(zhǔn)化特性,被廣泛應(yīng)用于數(shù)據(jù)交換、配置文件、Web服務(wù)等領(lǐng)域,C語言作為一種高效、底層的編程語言,在處理XML數(shù)據(jù)方面也有廣泛的應(yīng)用,本文將深入探討C語言操作XML的技術(shù)和方法,需要的朋友可以參考下
    2025-03-03

最新評(píng)論

莱芜市| 临沭县| 双鸭山市| 肃北| 长治县| 平江县| 南昌县| 桐乡市| 鞍山市| 陵水| 楚雄市| 光山县| 龙江县| 澜沧| 湖南省| 奉贤区| 金塔县| 新乡县| 泗阳县| 察隅县| 海盐县| 罗江县| 阿拉善左旗| 浙江省| 新龙县| 塔河县| 景洪市| 陈巴尔虎旗| 辽宁省| 新化县| 高雄市| 诸暨市| 那坡县| 甘孜| 湖州市| 沈丘县| 扎囊县| 禄劝| 抚松县| 罗源县| 惠东县|