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

C語言操作符超詳細(xì)講解上篇

 更新時(shí)間:2022年04月13日 11:00:32   作者:初學(xué)C語言者  
C?語言提供了豐富的操作符,有:算術(shù)操作符,移位操作符,位操作符,賦值操作符,單目操作符,關(guān)系操作符,邏輯操作符,條件操作符等。因?yàn)槠^大將分兩篇講解,讓我們通讀本篇來詳細(xì)了解吧

前言

操作符主要內(nèi)容包括:各種操作符的介紹,用表達(dá)式求值。

1、操作符的分類

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

2、算術(shù)操作符

 +  -  *  /  %  (加法 減法 乘法 取余 取模)
int main()
{
	int a = 9 / 2;//4
	float b = 9 / 2;
	int c = 9.0 / 2;
	float d = 9.0 / 2;//4.5
	float e = (float)9.0 / 2;

	printf("%d\n", a);
	printf("%f\n", b);
	printf("%d\n", c);
	printf("%f\n", d);
	printf("%f\n", e);
	return 0;
}

運(yùn)行結(jié)果見下圖:

在這里插入圖片描述

在這里插入圖片描述

在這里插入圖片描述

通過例子可發(fā)現(xiàn),變量的類型使用錯誤的話,結(jié)果也是錯誤的

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

3、移位操作符

移位操作符的操作數(shù)只能是整數(shù)

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

3.1 左移操作符

  • 移位規(guī)則:左邊拋棄、右邊補(bǔ)0
  • 整數(shù)是 int 型,占4個字節(jié),有32位表示。其中最高位表示符號,0為正,1為負(fù)
  • 整數(shù)在內(nèi)存中存儲的是補(bǔ)碼的二進(jìn)制,正數(shù)的原碼、反碼、補(bǔ)碼是相同的
  • 操作符對整數(shù)操作的流程:

(1)先將整數(shù)的原碼轉(zhuǎn)換成反碼

(2)反碼 +1轉(zhuǎn)換成補(bǔ)碼

(3)最后對整數(shù)的補(bǔ)碼進(jìn)行操作

(4)操作結(jié)束后,將操作后的補(bǔ)碼 -1 轉(zhuǎn)換成反碼

(5)將反碼轉(zhuǎn)換成最終的原碼

  • 函數(shù)printf打印的是整數(shù)的原碼

3.1.1 正數(shù)左移1位

代碼如下(示例):

int main()
{
	int a = 5;
	int b = a << 1;//操作的補(bǔ)碼二進(jìn)制位,a本身結(jié)果不變
	printf("%d\n", a);//打印5
	printf("%d\n", b);// -10
	return 0;
}

在這里插入圖片描述

結(jié)果運(yùn)行見下圖,與分析的結(jié)果一致,左移1位的效果相當(dāng)于乘以2,左移在51單片機(jī)、STM32中,操作寄存器會經(jīng)常用到。

在這里插入圖片描述

3.1.2 負(fù)數(shù)左移1位

int main()
{
	int a = -5;
	int b = a << 1;//<< >> 操作的二進(jìn)制位
	printf("%d\n", a);//打印-5
	printf("%d\n", b);// -10
	return 0;
}

在這里插入圖片描述

運(yùn)行結(jié)果見下圖,和分析的結(jié)果一致

在這里插入圖片描述

3.2 右移操作符

右移移位規(guī)則運(yùn)算分兩種:

  • 邏輯移位:左邊用0填充,右邊丟棄
  • 算術(shù)移位:左邊用原該值的符號位填充,右邊丟棄

3.2.1 正數(shù)右移1位

int main()
{
	int a = 5;
	int b = a >> 1;//右移不一定是除2

	printf("%d\n", a);//打印-5
	printf("%d\n", b);// -3
	return 0;
}

下面分析右移的過程:正數(shù)的原碼、反碼、補(bǔ)碼一樣

00000000 00000000 00000000 00000101 //5的二進(jìn)制補(bǔ)碼
//算術(shù)右移:左邊用原該值的符號位1填充,右邊丟棄1
00000000 00000000 00000000 00000010 //右移后的補(bǔ)碼
//右移后的補(bǔ)碼就是右移后的原碼  2

結(jié)果見下圖:

在這里插入圖片描述

3.2.2 負(fù)數(shù)右移1位

int main()
{
	int a = -5;
	int b = a >> 1;//右移不一定是除2

	printf("%d\n", a);//打印-5
	printf("%d\n", b);// -3
	return 0;
}

下面分析右移的過程:

10000000 00000000 00000000 00000101 //-5的二進(jìn)制原碼
11111111 11111111 11111111 11111010 //反碼
11111111 11111111 11111111 11111011 //補(bǔ)碼:反碼+1
//算術(shù)右移:左邊用原該值的符號位1填充,右邊丟棄1
11111111 11111111 11111111 11111101 //右移后的補(bǔ)碼
11111111 11111111 11111111 11111100 //反碼:補(bǔ)碼-1
10000000 00000000 00000000 00000011 //原碼  -3

結(jié)果見下圖:

在這里插入圖片描述

3.3 移位操作符說明

注意事項(xiàng):

  • 右移操作符采用邏輯移位還是算術(shù)移位,取決于電腦編譯器,我的是算術(shù)移位,所以舉例以算術(shù)移位分析的,邏輯移位分析流程一樣
  • 對于移位運(yùn)算符,不要移動負(fù)數(shù)位,這個是標(biāo)準(zhǔn)未定義的,例如:
int num = 10;
num>>-1;//10右移-1位,這是錯誤的表達(dá)

4、位操作符

位操作符有:

& //按位與     相同為1, 相異為0
| //按位或     有1為1, 全0為0
^ //按位異或    相同為0, 相異為1
//注:他們的操作數(shù)必須是整數(shù)

int main()
{
	int a = 3;
	int b = -5;
	int c = a & b;
	int d = a | b;
	int e = a ^ b;//異或
	//對應(yīng)的二進(jìn)制位:相同位0,相異為1
	printf("%d\n", c);// 打印3
	printf("%d\n", d);// -5
	printfan("%d\n", e);// -8	
	return 0;
}

00000000 00000000 00000000 00000011   3的補(bǔ)碼
11111111 11111111 11111111 11111011   -5的補(bǔ)碼
//按位與:  相同為1, 相異為0
00000000 00000000 00000000 00000011    3的補(bǔ)碼,原碼表示3
//按位或:   有1為1, 全0為0
11111111 11111111 11111111 11111011   -5的補(bǔ)碼,原碼表示-5
//按位異或: 相同為0, 相異為1
11111111 11111111 11111111 11111000  補(bǔ)碼
11111111 11111111 11111111 11110111  反碼
10000000 00000000 00000000 00001000  原碼 -8

輸出結(jié)果見下圖,與分析一致:

在這里插入圖片描述

4.1 練習(xí) 1

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

int main()
{
	int a = 3;
	int b = 5;

	printf("a=%d b=%d\n", a, b);
	//第一種,常用的方法,創(chuàng)建中間變量
	int tmp = a;
	a = b;
	b = tmp;	
	//第二種,不創(chuàng)建變量
	a = a + b;
	b = a - b;
	a = a - b;
	//第三種,不創(chuàng)建變量,很難想到
	a = a ^ b;
	b = a ^ b;
	a = a ^ b;
	printf("a=%d b=%d\n", a, b);
	return 0;
}

4.2 練習(xí) 2

求一個整數(shù)存儲在內(nèi)存中的二進(jìn)制中1的個數(shù)

//舉例: 5   &1, 然后右移1位, 再&1
//00000000 00000000 00000000 00000101
//00000000 00000000 00000000 00000001

int main()
{
	int num = 0;
	scanf("%d", &num);
	int i = 0;
	int cnt = 0;
	//位操作
	for ( i = 0; i < 32; i++)
	{//每次右移一位就 &1
		if (1==((num>>i)&1))
		{
			cnt++;//所有位與1,相同為1,相異為0
		}
	}
	printf("%d", cnt);
	return 0;
}

總結(jié)

本文對部分操作符進(jìn)行了,介紹,也分析了操作符的具體實(shí)現(xiàn)過程,這里了解原理即可,具體運(yùn)算交給計(jì)算機(jī)執(zhí)行,沒必要每個都自己畫圖分析,耗時(shí),不細(xì)心可能還會出錯,32位二進(jìn)制建議大家劃分成4個字節(jié),8位一組,好看一些,這在STM32 單片機(jī)對寄存器操作時(shí),經(jīng)常這樣劃分,一目了然。

下一篇點(diǎn)這里直達(dá)

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

相關(guān)文章

  • C++中范圍(Ranges)與視圖(Views)的常見問題、易錯點(diǎn)

    C++中范圍(Ranges)與視圖(Views)的常見問題、易錯點(diǎn)

    ranges和views是C20引入的重要特性,它們讓代碼更加簡潔、高效且富有表達(dá)力,通過理解其基本概念、注意常見的陷阱,并合理應(yīng)用高級技巧,開發(fā)者可以充分利用這些新特性,提升軟件質(zhì)量和開發(fā)效率,,本文將深入淺出地探討ranges與views的基礎(chǔ)概念、常見問題、易錯點(diǎn)及避免策略
    2024-06-06
  • 解析C#中不一樣的大小寫轉(zhuǎn)換

    解析C#中不一樣的大小寫轉(zhuǎn)換

    本篇文章是對C#中大小寫轉(zhuǎn)換的方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • C++中CSimpleList的實(shí)現(xiàn)與測試實(shí)例

    C++中CSimpleList的實(shí)現(xiàn)與測試實(shí)例

    這篇文章主要介紹了C++中CSimpleList的實(shí)現(xiàn)與測試實(shí)例,較為詳細(xì)的講述了C++列表類的實(shí)現(xiàn)方法,需要的朋友可以參考下
    2014-10-10
  • C/C++中帶空格字符串的輸入講解

    C/C++中帶空格字符串的輸入講解

    這篇文章主要給大家介紹了關(guān)于如何解決C++中帶空格字符串的輸入問題,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面來一起看看吧
    2021-09-09
  • VS2022連接sqlserver數(shù)據(jù)庫教程

    VS2022連接sqlserver數(shù)據(jù)庫教程

    本文主要介紹了VS2022連接sqlserver數(shù)據(jù)庫教程,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07
  • C語言for語句用法詳解

    C語言for語句用法詳解

    今天,小編講訴C語言中循環(huán)語句(for)的使用方法,作為示例,以一個簡單的例子講訴for語法。
    2015-11-11
  • C語言算法練習(xí)之佩奇存錢方案

    C語言算法練習(xí)之佩奇存錢方案

    這篇文章主要該大家分享C語言算法佩奇存錢的練習(xí),文章主要通過描述佩奇存錢的問題然后確定程序框架將結(jié)果運(yùn)算出來,下面來看詳細(xì)內(nèi)容吧,需要的朋友可以參考一下
    2022-04-04
  • C++ Qt開發(fā)之CheckBox多選框組件的用法詳解

    C++ Qt開發(fā)之CheckBox多選框組件的用法詳解

    Qt是一個跨平臺C++圖形界面開發(fā)庫,利用Qt可以快速開發(fā)跨平臺窗體應(yīng)用程序,在Qt中我們可以通過拖拽的方式將不同組件放到指定的位置,實(shí)現(xiàn)圖形化開發(fā)極大的方便了開發(fā)效率,本章將重點(diǎn)介紹CheckBox單行輸入框組件的使用方法,需要的朋友可以參考下
    2023-12-12
  • C++實(shí)現(xiàn)通訊錄管理系統(tǒng)項(xiàng)目

    C++實(shí)現(xiàn)通訊錄管理系統(tǒng)項(xiàng)目

    這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)通訊錄管理系統(tǒng)項(xiàng)目,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • C++中獲取隨機(jī)數(shù)的常用方法小結(jié)

    C++中獲取隨機(jī)數(shù)的常用方法小結(jié)

    這篇文章主要為大家詳細(xì)介紹了C++中獲取隨機(jī)數(shù)的幾種常用方法,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,感興趣的小伙伴可以了解下
    2025-01-01

最新評論

大城县| 大埔区| 贵阳市| 太湖县| 常宁市| 大宁县| 都安| 新宾| 绍兴县| 凌云县| 丹江口市| 芒康县| 哈密市| 武宁县| 竹山县| 瑞昌市| 右玉县| 甘肃省| 麻江县| 红原县| 沂南县| 鲜城| 眉山市| 江西省| 大洼县| 内江市| 滁州市| 辽阳市| 桑植县| 多伦县| 江安县| 伊春市| 襄垣县| 阆中市| 本溪| 额尔古纳市| 竹山县| 宕昌县| 偃师市| 越西县| 神木县|