欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C語言全面細(xì)致精講操作符的使用

 更新時間:2022年05月09日 16:42:36   作者:拾至灬名瑰  
C?語言提供了豐富的操作符,有:算術(shù)操作符,移位操作符,位操作符,賦值操作符,單目操作符,關(guān)系操作符,邏輯操作符,條件操作符等。接下了讓我們詳細(xì)了解掌握它

前言

本次文章我們要講各種操作符的介紹,內(nèi)容非常詳細(xì),大家拭目以待哦!

首先介紹操作符的種類

操作符分類:

  1. 算術(shù)操作符
  2. 移位操作符
  3. 位操作符
  4. 賦值操作符
  5. 單目操作符
  6. 關(guān)系操作符
  7. 邏輯操作符
  8. 條件操作符
  9. 逗號表達(dá)式
  10. 下標(biāo)引用、函數(shù)調(diào)用和結(jié)構(gòu)成員

一、算術(shù)操作符

+    -   *   /   %

  1. 除了 % 操作符之外,其他的幾個操作符可以作用于整數(shù)和浮點(diǎn)數(shù)。
  2. 對于 / 操作符如果兩個操作數(shù)都為整數(shù),執(zhí)行整數(shù)除法。而只要有浮點(diǎn)數(shù)執(zhí)行的就是浮點(diǎn)數(shù)除法。
  3. % 操作符的兩個操作數(shù)必須為整數(shù)。返回的是整除之后的余數(shù)。

二、移位操作符

<< 左移操作符
>> 右移操作符
注:移位操作符的操作數(shù)只能是整數(shù)。

1.左移操作符

移位規(guī)則:左邊拋棄、右邊補(bǔ)0

//10 下面是在二進(jìn)制中那個的表示形式
//0000000000000000000000000000000000001010
//左移一位
//0000000000000000000000000000000000010100

2.右移操作符

移位規(guī)則:

首先右移運(yùn)算分兩種:

1.邏輯移位

左邊用0填充,右邊丟棄

2.算術(shù)移位

左邊用原該值的符號位填充,右邊丟棄

//我們假設(shè)用-1來舉例子
//-1在二進(jìn)制中表示為32個1
//11111111111111111111111111111111
//邏輯右移
//01111111111111111111111111111111
//算術(shù)右移
//11111111111111111111111111111111

警告 :

對于移位運(yùn)算符,不要移動負(fù)數(shù)位,這個是標(biāo)準(zhǔn)未定義的。

例如:

int num = 10;
num>>-1;//error

三、位操作符

位操作符有:

& //按位與

| //按位或

^ //按位異或

注:他們的操作數(shù)必須是整數(shù)。

練習(xí)一下:

int main() {
	//& 按(2進(jìn)制)位與
	//| 按(2進(jìn)制)位或
	//^ 按(2進(jìn)制)位異或
	int a = 3;
	int b = -5;
	int c = a & b;
	//00000000 00000000 00000000 00000011 3的補(bǔ)碼
	//10000000 00000000 00000000 00000101 -5 原碼
	//11111111 11111111 11111111 11111010  反碼
	//11111111 11111111 11111111 11111011 補(bǔ)碼
	//00000000 00000000 00000000 00000011 3的補(bǔ)碼
	//00000000 00000000 00000000 00000011   //按位與 全1為1  其他位0
	printf("%d\n", c);
	int d = a | b;
	//11111111 11111111 11111111 11111011 補(bǔ)碼
	//00000000 00000000 00000000 00000011 3的補(bǔ)碼
	//11111111 11111111 11111111 11111011 補(bǔ)碼
	//10000000 00000000 00000000 00000100 
	//10000000 00000000 00000000 00000101 
	printf("%d\n", d);
	int e = a ^ b;
	//11111111 11111111 11111111 11111011 補(bǔ)碼
	//00000000 00000000 00000000 00000011 3的補(bǔ)碼
	//11111111 11111111 11111111 11111000
	//10000000 00000000 00000000 00000111
	//10000000 00000000 00000000 00001000
	printf("%d\n", e);
	return 0;
}

一道變態(tài)的面試題:

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

int main() {
	int a = 3;
	int b = 5;
	//printf("交換前a=%d,b=%d\n",a,b);
	方法一
	//a = a + b;
	//b = a - b;
	//a = a - b;
	//printf("交換前a=%d,b=%d\n", a, b);
	printf("交換前a=%d,b=%d\n", a, b);	
	//方法二
	a = a ^ b;//3^5
	b = a ^ b;//3^5^5=3
	a = a ^ b;//3^5^3=5
	printf("交換后a=%d,b=%d\n", a, b);
	return 0;
}

練習(xí):

編寫代碼實(shí)現(xiàn):求一個整數(shù)存儲在內(nèi)存中的二進(jìn)制中1的個數(shù)。

int main() {
	int m = 15;
	int i = 0;
	int count = 0;
	while (i < 32)
	{
		if (((m >> i) & 1) == 1)
			count++;
		i++;
	}
	printf("count:%d\n",count);
	return 0;
}

分別用每一位與1

這一位是1運(yùn)算后的結(jié)果就是1

四、賦值操作符

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

int weight = 120;//體重
weight = 89;//不滿意就賦值
double salary = 10000.0;
salary = 20000.0;//使用賦值操作符賦值。
賦值操作符可以連續(xù)使用,比如:
int a = 10;
int x = 0;
int y = 20; a = x = y+1;//連續(xù)賦值
這樣的代碼感覺怎么樣?
那同樣的語義,你看看:
x = y+1; a = x;
這樣的寫法是不是更加清晰爽朗而且易于調(diào)試。

復(fù)合賦值符

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

這些運(yùn)算符都可以寫成復(fù)合的效果。

比如:

int x = 10; x = x+10; x += 10;//復(fù)合賦值
//其他運(yùn)算符一樣的道理。這樣寫更加簡潔。

五、單目操作符

單目操作符介紹

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

演示代碼:

#include <stdio.h>
int main()
{
	 int a = -10;
	 int *p = NULL;
	 printf("%d\n", !2);
	 printf("%d\n", !0);
	 a = -a;
	 p = &a;
	 printf("%d\n", sizeof(a));
	 printf("%d\n", sizeof(int));
	 printf("%d\n", sizeof a);//這樣寫行不行?
	 printf("%d\n", sizeof int);//這樣寫行不行?//結(jié)果是不行
	 //其實(shí)我們從這里就可以看出sizeof不是一個函數(shù)
	 return 0; 
 }

關(guān)于sizeof其實(shí)我們之前已經(jīng)見過了,可以求變量(類型)所占空間的大小。

1.sizeof 和 數(shù)組

#include <stdio.h>
void test1(int arr[])
{
	 printf("%d\n", sizeof(arr));//(2)//這里是指針,因?yàn)閭鬟^來的是地址要拿指針接收 在32為機(jī)器下 字節(jié)為4
}
void test2(char ch[])
{
	 printf("%d\n", sizeof(ch));//(4)//同理//這里是指針,因?yàn)閭鬟^來的是地址要拿指針接收 在32為機(jī)器下 字節(jié)為4
}
int main()
{
	 int arr[10] = {0};
	 char ch[10] = {0};
	 printf("%d\n", sizeof(arr));//(1)//40
	 printf("%d\n", sizeof(ch));//(3)//10
	 test1(arr);
	 test2(ch);
	 return 0;
 }

問:
(1)、(2)兩個地方分別輸出多少?
(3)、(4)兩個地方分別輸出多少?

2.++和–運(yùn)算符

//前置++和--
#include <stdio.h>
int main()
{
    int a = 10;
    int x = ++a;
     //先對a進(jìn)行自增,然后對使用a,也就是表達(dá)式的值是a自增之后的值。x為11。
    int y = --a;
    //先對a進(jìn)行自減,然后對使用a,也就是表達(dá)式的值是a自減之后的值。y為10;
    return 0; 
 }
//后置++和--
#include <stdio.h>
int main()
{
    int a = 10;
    int x = a++;
    //先對a先使用,再增加,這樣x的值是10;之后a變成11;
    int y = a--;
    //先對a先使用,再自減,這樣y的值是11;之后a變成10;
    return 0; }

六、關(guān)系操作符

關(guān)系操作符

>
>=
<
<=
!=   用于測試“不相等”
==      用于測試“相等”

這些關(guān)系運(yùn)算符比較簡單,沒什么可講的,但是我們要注意一些運(yùn)算符使用時候的陷阱。

警告:

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

七、邏輯操作符

邏輯操作符有哪些:

&& 邏輯與
|| 邏輯或

區(qū)分邏輯與和按位與

區(qū)分邏輯或和按位或

1&2----->0

1&&2---->1

1|2----->3

1||2---->1

接下來我們引入一道360的面試題

#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é)果是什么?

這里邏輯且運(yùn)算碰到錯誤直接結(jié)束,后面的運(yùn)算就不再繼續(xù)

而邏輯或運(yùn)算碰到正確直接結(jié)束,后面的運(yùn)算就不再繼續(xù)

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é)果是什么?

八、條件操作符

exp1 ? exp2 : exp3

練習(xí):

1.
if (a > 5)
        b = 3;
else
        b = -3;
轉(zhuǎn)換成條件表達(dá)式,是什么樣?
2.使用條件表達(dá)式實(shí)現(xiàn)找兩個數(shù)中較大值
 return a>b?a:b;

九、逗號表達(dá)式

exp1, exp2, exp3, …expn

逗號表達(dá)式,就是用逗號隔開的多個表達(dá)式。

逗號表達(dá)式,從左向右依次執(zhí)行。整個表達(dá)式的結(jié)果是最后一個表達(dá)式的結(jié)果。

//代碼1
	int a = 1;
	int b = 2;
	int c = (a>b, a=b+10, a, b=a+1);//逗號表達(dá)式
//	c是多少?
//代碼2
	if (a =b + 1, c=a / 2, d > 0)
//代碼3 
	a = get_val();
	count_val(a);
	while (a > 0) {
 //業(yè)務(wù)處理
        a = get_val();
        count_val(a);
	}
//如果使用逗號表達(dá)式,改寫:
while (a = get_val(), count_val(a), a>0) {
         //業(yè)務(wù)處理
	}

提示

這里一定要計(jì)算前面的值,可能會對最后一個表達(dá)式進(jìn)行影響

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

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

操作數(shù):

一個數(shù)組名 + 一個索引值

int arr[10];//創(chuàng)建數(shù)組
 arr[9] = 10;//實(shí)用下標(biāo)引用操作符。
// [ ]的兩個操作數(shù)是arr和9。
//也可以這樣
[9]arr=10;
//但是不建議這樣,代碼看起來不直觀

2. ()函數(shù)調(diào)用操作符

接受一個或者多個操作數(shù):第一個操作數(shù)是函數(shù)名,剩余的操作數(shù)就是傳遞給函數(shù)的參數(shù)。

#include <stdio.h>
 void test1()
 {
	 printf("hello\n");
 }
 void test2(char *str)
 {
	 printf("%s\n", str);
 }
 int main()
 {
	 test1();            //實(shí)用()作為函數(shù)調(diào)用操作符。
	 test2("hello world.");//實(shí)用()作為函數(shù)調(diào)用操作符。
	 return 0;
 }

3. 訪問一個結(jié)構(gòu)的成員

. 結(jié)構(gòu)體.成員名

-> 結(jié)構(gòu)體指針->成員名

#include <stdio.h>
struct Stu
{
 	char name[10];
	 int age;
 	char sex[5];
 	double score;
 };
void set_age1(struct Stu stu) {
	 stu.age = 18; 
 }
void set_age2(struct Stu* pStu) {
	 pStu->age = 18;//結(jié)構(gòu)成員訪問
}
int main()
{
	 struct Stu stu;
	 struct Stu* pStu = &stu;//結(jié)構(gòu)成員訪問
 
	 stu.age = 20;//結(jié)構(gòu)成員訪問
	 set_age1(stu);
 
 	pStu->age = 20;//結(jié)構(gòu)成員訪問
	 set_age2(pStu);
	 return 0; 
}

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

相關(guān)文章

  • 提高C程序效率的10種有效方法

    提高C程序效率的10種有效方法

    本文向你介紹規(guī)范你的C代碼的10種方法。需要的朋友可以過來參考下,希望對大家有所幫助
    2013-10-10
  • C++中繼承與組合的區(qū)別詳細(xì)解析

    C++中繼承與組合的區(qū)別詳細(xì)解析

    C++的“繼承”特性可以提高程序的可復(fù)用性。正因?yàn)椤袄^承”太有用、太容易用,才要防止亂用“繼承”
    2013-09-09
  • 在C++中自定義宏的簡單方法

    在C++中自定義宏的簡單方法

    這篇文章主要介紹了在C++中自定義宏的簡單方法,作者建議使用類似定義函數(shù)一樣的方法來定義宏,需要的朋友可以參考下
    2015-07-07
  • C++使用MySQL-Connector/C++連接MySQL出現(xiàn)LNK2019錯誤的解決方法

    C++使用MySQL-Connector/C++連接MySQL出現(xiàn)LNK2019錯誤的解決方法

    這篇文章主要介紹了C++使用MySQL-Connector/C++連接MySQL出現(xiàn)LNK2019錯誤的解決方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-03-03
  • QString的常用方法(小結(jié))

    QString的常用方法(小結(jié))

    這篇文章主要介紹了QString的常用方法(小結(jié)),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • Cocos2d-x學(xué)習(xí)筆記之Hello World!

    Cocos2d-x學(xué)習(xí)筆記之Hello World!

    這篇文章主要介紹了Cocos2d-x學(xué)習(xí)筆記之Hello World!本文基于vs2010和C++語言開發(fā),需要的朋友可以參考下
    2014-09-09
  • C++實(shí)現(xiàn)哈希散列表的示例

    C++實(shí)現(xiàn)哈希散列表的示例

    本文主要介紹了C++實(shí)現(xiàn)哈希散列表的示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07
  • C語言中的socket編程實(shí)例代碼

    C語言中的socket編程實(shí)例代碼

    這篇文章主要介紹了如何用C語言實(shí)現(xiàn)socket編程,文中代碼非常詳細(xì),供大家學(xué)習(xí)參考,感興趣的朋友可以了解下
    2020-06-06
  • C++利用PCL點(diǎn)云庫操作txt文件詳解

    C++利用PCL點(diǎn)云庫操作txt文件詳解

    這篇文章主要為大家詳細(xì)介紹了C++如何利用PCL點(diǎn)云庫操作txt文件,文中的示例代碼講解詳細(xì),具有一定的學(xué)習(xí)價(jià)值,感興趣的小伙伴可以了解一下
    2024-01-01
  • makefile如何調(diào)用靜態(tài)庫的方法實(shí)現(xiàn)

    makefile如何調(diào)用靜態(tài)庫的方法實(shí)現(xiàn)

    這篇文章主要介紹了makefile如何調(diào)用靜態(tài)庫的方法實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12

最新評論