国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

C語言的操作符

這篇具有很好參考價(jià)值的文章主要介紹了C語言的操作符。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

前言

C語言中的操作符是用于操作變量、常量和表達(dá)式的符號(hào),以下是我學(xué)習(xí)操作符整理的相關(guān)知識(shí)點(diǎn)。

操作符分類

算數(shù)操作符

算數(shù)操作符: + - * / %

  1. +、-*、/可以用于操作整數(shù)和浮點(diǎn)數(shù)
  2. %只能操作整數(shù),返回整除后的余數(shù)

移位操作符

<< 左移操作符

>> 右移操作符

這兩個(gè)只能用于整數(shù)

  1. << 操作符

    • // 往左移,左邊丟掉,右邊補(bǔ)0
      
      // 例子
      int a = 3;  // 3在內(nèi)存中二進(jìn)制 00000000 00000000 00000000 00000011
      a = a << 1;  // 往左移1位,左邊的丟掉,右邊的補(bǔ)0,結(jié)果為 00000000 00000000 00000000 00000110  
      // 此時(shí)a=6
      
  2. >>操作符

    • /*
      往右移,分兩種情況
      	邏輯移位: 左邊補(bǔ)0,右邊丟掉
      	算數(shù)移位: 左邊補(bǔ)原符號(hào),右邊丟掉
      
      這里還有一個(gè)知識(shí)點(diǎn),就是負(fù)數(shù)在內(nèi)存中是以補(bǔ)碼的形式存在的
      以下是-7的原碼,反碼,補(bǔ)碼
      原碼: 第一位代表符號(hào)位
      	10000000 00000000 00000000 00000111
      反碼: 右原碼除了符號(hào)位,其他位取反
      	11111111 11111111 11111111 11111000
      補(bǔ)碼: 由反碼+1得到
      	11111111 11111111 11111111 11111001
      */
      
      // 例子
      int a = -7;  // -1在內(nèi)存中二進(jìn)制 11111111 11111111 11111111 11111001
      a = a >> 1;  // 往右移一位,通常是使用算數(shù)移位,補(bǔ)原符號(hào),得11111111 11111111 11111111 11111100
      /*
      補(bǔ)碼: 11111111 11111111 11111111 11111100   
      -1得到反碼: 11111111 11111111 11111111 11111011
      取反得到原碼: 10000000 00000000 00000000 00000100  -> 4
      此時(shí)a=4
      */
      

位操作符

位操作符: & | ^
位操作符只能操作整數(shù)

  • &按位與

    • /*
      使用兩個(gè)數(shù)的二進(jìn)制進(jìn)行運(yùn)算,只要有0就是0,全1才為1
      */
      
      #include <stdio.h>
      
      int main()
      {
      	int x = 2;  // 00000000 00000000 00000000 00000010
      	int y = 1;  // 00000000 00000000 00000000 00000001
      	printf("%d\n", x & y);  // 00000000 00000000 00000000 00000000 -> 0
      	
          int a = 15;  // 00000000 00000000 00000000 00001111
      	int b = 8;  // 00000000 00000000 00000000 00001000
      	printf("%d\n", a & b);  // 00000000 00000000 00000000 00001000 -> 8
      	return 0;
      }
      
  • |按位或

    • /*
      使用兩個(gè)數(shù)的二進(jìn)制進(jìn)行運(yùn)算,全0才為0,只要有1就為1
      */
      
      #include <stdio.h>
      
      int main()
      {
      	int x = 2;  // 00000000 00000000 00000000 00000010
      	int y = 1;  // 00000000 00000000 00000000 00000001
      	printf("%d\n", x | y); // 00000000 00000000 00000000 00000011  -> 3
          
      	int a = 15;  // 00000000 00000000 00000000 00001111
      	int b = 8;  // 00000000 00000000 00000000 00001000
      	printf("%d\n", a | b);  // 00000000 00000000 00000000 00001111 -> 15
      	return 0;
      }
      
  • ^ 按位異或

    • /*
      使用兩個(gè)數(shù)的二進(jìn)制進(jìn)行運(yùn)算,相同為0,不相同為1
      */
      
      #include <stdio.h>
      
      int main()
      {
          int x = 2;  // 00000000 00000000 00000000 00000010
          int y = 1;  // 00000000 00000000 00000000 00000001
          printf("%d\n", x ^ y);  // 00000000 00000000 00000000 00000011  ->  3
          
          int a = 15;  // 00000000 00000000 00000000 00001111
          int b = 8;  // 00000000 00000000 00000000 00001000
          printf("%d\n", a ^ b);  // 00000000 00000000 00000000 00000111  -> 7
          return 0;
      }
      
  • 練習(xí)題

    • 不能創(chuàng)建臨時(shí)變量(第三個(gè)變量),實(shí)現(xiàn)兩個(gè)數(shù)的交換

      #include <stdio.h>
      
      int main()
      {
          int a = 2;  // 00000000 00000000 00000000 00000010
          int b = 3;  // 00000000 00000000 00000000 00000011
          a = a ^ b;  // a -> 00000000 00000000 00000000 00000001  -> 1
          b = a ^ b;  // b -> 00000000 00000000 00000000 00000010  -> 2
          a = a ^ b;  // a -> 00000000 00000000 00000000 00000011  -> 3
          // 最后a=3,b=2,實(shí)現(xiàn)了交換
          return 0;
      }
      
    • 編寫代碼實(shí)現(xiàn):求一個(gè)整數(shù)存儲(chǔ)在內(nèi)存中的二進(jìn)制中1的個(gè)數(shù)。

      #include <stdio.h>
      
      int main()
      {
          int a = 15;  // 00000000 00000000 00000000 00001111
          int count = 0;
          while(a)
          {
              // 這里就只寫后8位了
              // 第一輪: 00001111 & 00001110 -> 00001110  第二輪: 00001110 & 00001101 -> 00001100
              a = a & (a - 1);
              count += 1;
          }
          printf("%d\n", count);  // 4
          return 0;
      }
      

賦值操作符

可以隨意操作變量的值

普通的賦值符 =

復(fù)合賦值符 +=、-=、*=、/=、%=、>>=、<<=、&=、|=、^=

// 復(fù)合賦值符
int a = 10;
a += 10; // 跟 a = a + 10 效果一樣
a <<= 10; // 跟 a = a >> 10 效果一樣

單目操作符

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

    • // 非0取反就是0,0取反就是1
      
      #include <stdio.h>
      
      int main()
      {
      	printf("%d\n", !6);  // 0
      	printf("%d\n", !0);  // 1
      	return 0;
      }
      
  • -代表負(fù)值和+代表正值

  • &取地址

    • // 獲取變量的地址
      
      #include <stdio.h>
      
      int main()
      {
      	int num = 66;
      	printf("%p\n", &num); // 這里%p是打印的是地址,輸出的是num在內(nèi)存中的00000048F81CF884
      	return 0;
      }
      
  • sizeof計(jì)算操作符的類型長(zhǎng)度

    • #include <stdio.h>
      
      int main()
      {
      	int num = 10;
      	printf("%d\n", sizeof(num));  // 4 因?yàn)镮nt類型的字節(jié)數(shù)就是4
      	printf("%d\n", sizeof num);  // 4 因?yàn)閟izeof是操作符,不是函數(shù),所以可以這樣寫
      	return 0;
      }
      
      // 以下是關(guān)于sizeof的一個(gè)練習(xí),依次輸出的數(shù)字是什么
      #include <stdio.h>
      
      void test1(int arr1[])
      {
      	printf("%d\n", sizeof(arr1));  // 這里輸出的是內(nèi)存的字節(jié)數(shù),64位操作系統(tǒng),輸出8,32位則是4
      }
      
      void test2(char arr2[])
      {
      	printf("%d\n", sizeof(arr2));  // 這里輸出的是內(nèi)存的字節(jié)數(shù),64位操作系統(tǒng),輸出8,32位則是4
      }
      
      int main()
      {
      	int arr1[10] = { 0 };
      	char arr2[10] = { 0 };
      	printf("%d\n", sizeof(arr1));  // 這里輸出的是10個(gè)int類型的字節(jié)數(shù),40
      	printf("%d\n", sizeof(arr2));  // 這里輸出的是10個(gè)char類型的字節(jié)數(shù),10
      	test1(arr1);
      	test2(arr2);
      	return 0;
      }
      
      // 所以答案是: 40 10 8 8
      
  • ~操作符

    • // 二進(jìn)制按位取反
      
      int a = 1;  
      /* 
      1 -> 00000000 00000000 00000000 00000001 
      ~取反 -> 11111111 11111111 11111111 11111110  此時(shí)是負(fù)數(shù),存的是補(bǔ)碼,需要求出原碼
      +1獲得反碼 -> 11111111 11111111 11111111 11111101
      取反獲得原碼,符號(hào)不變 -> 10000000 00000000 00000000 00000010  -> -2
      */
      printf("%d\n", ~a);  // -2
      
  • ++--

    • // ++和-- 原理一致,以下以++為例
      
      // 前置++,就是先++,后引用
      int a = 3;
      int b = ++a;
      // 最后 a -> 4 ; b -> 4
      
      // 后置++,就是先引用,后++
      int a = 3;
      int b = a++;
      // 最后 a -> 4 ; b -> 3
      
  • *間接訪問操作符

    • // 一般配合&使用
      #include <stdio.h>
      
      void test(int* num)
      {
          *num = 666;
      }
      
      int main()
      {
          int num = 0;
          // 此時(shí)需要一個(gè)函數(shù)改變num的值
          test(&num);
          printf("%d\n", num);  // 666
          return 0;
      }
      
  • (類型)可以強(qiáng)制類型轉(zhuǎn)換

    • int a = 3.16;  // 當(dāng)出現(xiàn)將double類型賦值給int類型的變量時(shí),編譯的時(shí)候會(huì)提示3.16是double類型的,使用a來接收的話可能會(huì)丟失數(shù)據(jù)
      int a = (int) 3.16;  // 這樣就不會(huì)先出警告了
      

邏輯操作符

&& 邏輯與

|| 邏輯或

  • &&邏輯與

    • // 有0則為0,全非0為1
      
      int main()
      {
      	int a = 5;
      	int b = 0;
      	printf("%d\n", a && b);  // 0
          
      	int x = 2;
      	int y = 3;
      	printf("%d\n", x && y);  // 1
      }
      
      
  • ||邏輯或

    • // 只有有非0就為1,全0才為0
      
      int main()
      {
      	int a = 5;
      	int b = 0;
      	printf("%d\n", a || b);  // 1
      
      	int x = 0;
      	int y = 0;
      	printf("%d\n", x || y);  // 0
      }
      
  • 練習(xí)題

    • 寫出程序輸出的結(jié)果
      #include <stdio.h>
      
      int main()
      {
      	int i = 0, a = 0, b = 2, c = 3, d = 4;
      	c = a++ && ++b && d++;
      	printf("a = %d\t b = %d\t c = %d\t d = %d\n", a, b, c, d);
      	return 0;
      }
      
      /*
      當(dāng)執(zhí)行到c = a++ && ++b && d++;時(shí),此時(shí)是a++先引用后++
      c = 0 && ++b && d++;因?yàn)?與上任何數(shù)都是0,所以后面的++b和d++不會(huì)執(zhí)行
      最后輸出 a = 1   b = 2   c= 0   d = 4
      */
      
      // 擴(kuò)展,以下輸出結(jié)果是什么
      #include <stdio.h>
      
      int main()
      {
      	int i = 0, a = 0, b = 2, c = 3, d = 4;
      	c = a++ || ++b || d++;
      	printf("a = %d\t b = %d\t c = %d\t d = %d\n", a, b, c, d);
      	return 0;
      }
      
      // 這里輸出是a = 1   b = 3   c= 1   d = 4
      

條件操作符

格式: exp1 ? exp2 : exp3

當(dāng)exp1成立,執(zhí)行exp2,否則exp3

  • 例子

    • // 請(qǐng)輸入一個(gè)整數(shù),如果這個(gè)整數(shù)比10大,輸出比10大,反之輸出小于等于10
      #include <stdio.h>
      
      int main()
      {
      	int num = 0;
      	scanf("%d", &num);
      	num > 10 ? printf("比10大\n") : printf("小于等于10\n");  // 這里使用的就是條件操作符
      	return 0;
      }
      

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

格式: exp1, exp2, exp3, exp4

從左往右依次執(zhí)行,表達(dá)式的結(jié)果是最后一個(gè)表達(dá)式的結(jié)果

  • 例子

    • int main()
      {
      	int a = 1;
      	int b = 1;
      	int c = (a++, b += a, a += b);
      	printf("%d\n", c);  // 5
      	return 0;
      }
      
      /*
      解析:
      	先是a++,a=2
      	然后b+=a,b=3
      	最后a+=b,a=5
      	所以c=5
      */
      

下標(biāo)引用、函數(shù)調(diào)用和結(jié)構(gòu)成員

  • 下標(biāo)引用操作符[]

    • 格式: 一個(gè)數(shù)組名 + 一個(gè)索引值
      #include <stdio.h>
      
      int main()
      {
      	int arr[5] = { 0 };
      	printf("%d\n", arr[2]);  // 0
      	arr[2] = 10;  // 這里使用下標(biāo)引用操作符修改了數(shù)組里的元素
      	// 2[arr] = 5; 這個(gè)其實(shí)也能生效,但是不會(huì)用,其實(shí)底層是*(2+arr) = 5;
      	printf("%d\n", arr[2]);  // 10
      	return 0;
      }
      
  • 函數(shù)調(diào)用操作符()

    • 格式: 函數(shù)名+()
      int test()
      {
          return 1;
      }
      
      int main()
      {
          int num = test();  // 函數(shù)后面的()就是函數(shù)調(diào)用操作符
          return 0;
      }
      
  • 訪問一個(gè)結(jié)構(gòu)的成員

    • .:結(jié)構(gòu)體.成員名,->:結(jié)構(gòu)指針->成員文章來源地址http://www.zghlxwxcb.cn/news/detail-428164.html

      // 定義結(jié)構(gòu)體
      struct Stu
      {
      	char name[10];
      	int age;
      	char sex[5];
      };
      
      // 使用結(jié)構(gòu)指針
      void set_age(struct Stu* pStu)
      {
      	pStu->age = 20;
      }
      
      // 使用結(jié)構(gòu)體
      void print_age(struct Stu stu)
      {
      	printf("%d\n", stu.age);
      }
      
      int main()
      {
      	struct Stu stu;
      	set_age(&stu);
      	print_age(stu);  // 20
      	return 0;
      }
      

到了這里,關(guān)于C語言的操作符的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • linux bash shell變量操作符 —— 筑夢(mèng)之路

    ${var} 返回變量var的內(nèi)容,單獨(dú)使用時(shí)有沒有{}一樣,混合多個(gè)變量和常量時(shí),用{}界定變量名 ${#var} 返回變量var內(nèi)容的長(zhǎng)度 ${var:offset} 從變量var中的偏移量offset開始截取到字符串結(jié)尾的子字符串,offset從0開始 ${var:offset:length} 從變量var中的偏移量offset開始截取長(zhǎng)度為length的子字

    2024年02月04日
    瀏覽(26)
  • 【C語言初階】帶你輕松玩轉(zhuǎn)所有常用操作符(1) ——算數(shù)操作符,移位操作符,位操作符

    【C語言初階】帶你輕松玩轉(zhuǎn)所有常用操作符(1) ——算數(shù)操作符,移位操作符,位操作符

    君兮_的個(gè)人主頁 勤時(shí)當(dāng)勉勵(lì) 歲月不待人 C/C++ 游戲開發(fā) Hello,這里是君兮_,最近要準(zhǔn)備期末復(fù)習(xí)了,可能更新的就不會(huì)那么頻繁了,下個(gè)星期恢復(fù)正常更新。 今天給大家?guī)淼氖遣僮鞣斀?,由于這部分的內(nèi)容比較多,可能會(huì)分成幾部分講,今天帶來的是第一部分的內(nèi)容,廢

    2024年02月11日
    瀏覽(31)
  • 初始C語言——詳細(xì)講解操作符以及操作符的易錯(cuò)點(diǎn)

    初始C語言——詳細(xì)講解操作符以及操作符的易錯(cuò)點(diǎn)

    ?第一章?“C“滸傳——初識(shí)C語言(更適合初學(xué)者體質(zhì)哦?。??第二章?詳細(xì)認(rèn)識(shí)分支語句和循環(huán)語句以及他們的易錯(cuò)點(diǎn)? ?第三章?初階C語言——特別詳細(xì)地介紹函數(shù) ?第四章?初始C語言——詳細(xì)地講解數(shù)組的內(nèi)容以及易錯(cuò)點(diǎn) ?第五章? 初始C語言——詳細(xì)講解操作符以及操

    2024年02月13日
    瀏覽(36)
  • 【c語言操作符系列1】^(異或操作符)講解和多種例題詳解

    【c語言操作符系列1】^(異或操作符)講解和多種例題詳解

    目錄 一、^ 是什么(^稱為異或) 二、^的規(guī)律(特點(diǎn)) 三、可利用^秒殺的常見例題(重點(diǎn)) 1、消失的數(shù)字 ?2、不一樣的人生密碼 3、交換兩個(gè)數(shù)(不能創(chuàng)建中間變量) 4、找出只出現(xiàn)一個(gè)的兩個(gè)數(shù)字 是一種操作符, 針對(duì)二進(jìn)制異或而言的 ,兩個(gè)數(shù)對(duì)應(yīng)的二進(jìn)制位相同,異或

    2024年02月16日
    瀏覽(27)
  • <C語言> 操作符

    <C語言> 操作符

    加法(+):用于將兩個(gè)操作數(shù)相加。 減法(-):用于將第一個(gè)操作數(shù)減去第二個(gè)操作數(shù)。 乘法(*):用于將兩個(gè)操作數(shù)相乘。 除法(/):用于將第一個(gè)操作數(shù)除以第二個(gè)操作數(shù)。 取模(%):用于求兩個(gè)操作數(shù)相除的余數(shù)。 乘法、除法和取模具有相同的優(yōu)先級(jí),高于加法

    2024年02月12日
    瀏覽(20)
  • 【C語言】操作符

    【C語言】操作符

    算術(shù)操作符 移位操作符 位操作符 賦值操作符 單目操作符 關(guān)系操作符 邏輯操作符 條件操作符 逗號(hào)操作符 下標(biāo)引用、函數(shù)調(diào)用和結(jié)構(gòu)成員操作符 除了 % 操作符之外,其他的幾個(gè)操作符可以作用于整數(shù)和浮點(diǎn)數(shù)。 對(duì)于 / 操作符如果兩個(gè)操作數(shù)都為整數(shù),執(zhí)行整數(shù)除法。而只

    2024年01月16日
    瀏覽(26)
  • linq中的操作符

    LINQ(Language Integrated Query)是一種用于.NET平臺(tái)的查詢語言,用于查詢和操作各種數(shù)據(jù)源,如集合、數(shù)據(jù)庫和XML。LINQ提供了一組標(biāo)準(zhǔn)查詢操作符,用于執(zhí)行各種查詢操作。 LINQ(Language Integrated Query)是一種用于.NET平臺(tái)的查詢語言,用于查詢和操作各種數(shù)據(jù)源,如集合、數(shù)據(jù)庫

    2024年02月14日
    瀏覽(24)
  • 【C語言】操作符詳解

    【C語言】操作符詳解

    ??個(gè)人主頁:Weraphael ???作者簡(jiǎn)介:目前正在回爐重造C語言(2023暑假) ??專欄:【C語言航路】 ?? 希望大家多多支持,咱一起進(jìn)步!?? 如果文章對(duì)你有幫助的話 歡迎 評(píng)論?? 點(diǎn)贊???? 收藏 ?? 加關(guān)注?? 算術(shù)操作符 位移操作符 位操作符 賦值操作符 單目操作符 關(guān)

    2024年02月16日
    瀏覽(25)
  • c語言---操作符(詳解)

    c語言---操作符(詳解)

    算術(shù)操作符: + 、- 、*、/ 、% 移位操作符: 位操作符: | ^ ` 賦值操作符: = 、+= 、 -= 、 = 、 /= 、%= 、= 、= 、= 、|= 、^= 單?操作符: !、++、–、、 、+、-、~ 、sizeof、(類型) 關(guān)系操作符: 、= 、 、= 、 == 、 != 邏輯操作符: 、|| 條件操作符: ? : 逗號(hào)表達(dá)式: , 下標(biāo)引?: [

    2024年02月22日
    瀏覽(25)
  • C語言操作符例題

    感謝各位大佬對(duì)我的支持,如果我的文章對(duì)你有用,歡迎點(diǎn)擊以下鏈接 ?????? 個(gè)人主頁 ?????? C語言 ????????? C語言例題 ?????? python 下面代碼的結(jié)果是:( ) A.a = 8 b = 23 c = 8 B.a = 9 b = 23 c = 8 C.a = 9 b = 25 c = 8 D.a = 9 b = 24 c = 8 答案 B c=++a是先執(zhí)行++a,也就是a=a+1=6(注意這

    2024年02月04日
    瀏覽(18)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包