八、C語言:操作符詳解

一、移位操作符

1.1左移操作

左邊丟棄,右邊補0

1.2右移操作

算數右移:右邊丟棄,左邊補原符號位

邏輯右移:右邊丟棄,左邊補0

int main()
{int a = -1;int b = a >> 1;printf("b=%d\n",b);return 0;
}

原碼:10000000 00000000 00000000 00000001

反碼:11111111 11111111 11111111 11111110

補碼:11111111 11111111 11111111 11111111

右移一位,左邊補符號位1,仍然為11111111 11111111 11111111 11111111

輸出:b=-1

說明輸出采用的是算數右移,a的值本身不發生變化。沒有移動負數位


二、編程題

2.1 不能創建臨時變量,實現兩個變量的交換

方法1:(缺陷:數值太大的時候容易溢出)

int a = 3;
int b = 5;
a = a + b;? ? //存放a與b的和
b = a - b;? ? //(a+b)-b=a
a = a - b;? ? // (a+b)-a

方法2:

int a = 3;
int b = 5;
a = a^b;
b = a^b;? ?//b = (a^b)^b=a
a? =a^b;? ?//a = (a^b)^a=b

補充:

0與任意數異或都為他本身? ? a^0=a;

任意數與他本身異或都為0? ? a^a=0;


三、單目運算符

!、-、+、&、sizeof、~、++、--、*、(類型)

3.1 sizeof(字節為單位)

sizeof返回的是一個無符號整數

%d打印的是有符號整數,%u打印的是無符號整數

int a = 10;
int arr[10] = {0};
printf("%d\n", sizeof(arr));
printf("%d\n", sizeof(int [10]));  //40printf("%d\n", sizeof(a));
printf("%d\n", sizeof(int));
printf("%d\n", sizeof a);    //sizeof是操作符,不是函數
printf("%d\n", sizeof int);  //err

3.2 sizeof(s = a+2)

short s = 5;
int a = 2;
printf("%d\n", sizeof(s = a+2));
printf("%d\n", s);

//sizeof括號中的表達式不參與運算

sizeof(s = a+2)在編譯時就已經完成,計算的就是s的大小;s = a+2在運行時計算,所以到運行時?沒有s = a+2


3.3 ~按位取反

int main()
{int a = 0;printf("%d",~a);return 0;
}

整型數據在計算機中是以補碼的形式存在的,按位取反是對補碼進行取反

0的原碼、反碼、補碼

0+:00000000 ?00000000 ?00000000

0-:10000000? ?11111111? ? 00000000

0+和0-的補碼都是00000000


a的大小為4個字節,共32位

// 0的補碼: ? ? 00000000 00000000 00000000 00000000
//~0的補碼: ? ?11111111 11111111 11111111 11111111
//~0的反碼: 11111111 11111111 11111111 11111110?
//~0的原碼: 10000000 00000000 00000000 00000001 = -1


四、邏輯操作符

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;
}

輸出:? ? ? a = 1
?????????????????b = 2
?????????????????c = 3
? ? ? ? ? ? ? ? ?d = 4

分析:?? ?i = a++ && ++b && d++;? 0&&()結果一定為0,所以后面的式子不在進行運算

a的值先為0與后面的式子&&,在+1,b,d的值不發生變化


五、逗號表達式

從左向右依次計算,但整個表達式的結果是最后一個表達式的結果

int a = 3;
int b = 5;
int c = 0;
int d = (c = 5, a = c + 3, b = a - 4, c += 5);
printf("%d\n", d);  //10
a = get_val();
count_val(a);
while(a>0)
{//業務處理a = get_val();count_val(a);
}while( a = get_val(),count_val(a),a>0)
{//業務處理
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/23057.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/23057.shtml
英文地址,請注明出處:http://en.pswp.cn/web/23057.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【Linux進程篇】Linux進程管理應用——虛假的shell腳本

W...Y的主頁 😊 代碼倉庫分享💕 前言:我們已經了解了進程的工作原理,并且學習了進程創建、進程終止、進程等待以及進程程序替換。為了更好的鞏固這些知識,我們可以創建一個簡易的shell命令行。 目錄 做一個簡易的s…

GAT1399協議分析(六)--校時

一、官方消息定義 DeviceIDType :GA/T1400.1,采集設備、 卡口點位、 采集系統、分析系統、視圖庫、應用平臺等設備編碼規則 TimeCorrectModeType: dateTime時間格式: TimeZone:時區,GAT1400里面沒有找到具體內容&…

臥式攪拌機:一鍵自動稱重輕松搞定

在現代化工業生產中,G效、精準的設備是提高生產效率、降低生產成本。近年來,臥式攪拌機一鍵自動稱重包裝機的出現,無疑為眾多行業帶來了變革。這種集攪拌、稱重、包裝于一體的智能化設備,以其G效、便捷、精準的特點,迅…

六軸機器手臂運動控制——直流伺服反饋系統設計(比賽項目計劃書+設計總結+硬件+源代碼+上位機等)

TW的硬件一直很強,這是難得的硬件創新比賽的優秀作品,資料非常完整理。 硬件設計,源碼,項目計劃書,甚至包含了事后的復盤總結文檔。 是不可多得的好資料。 項目系統框架圖 1. 硬件系統框架圖 (請以方塊圖形式呈現) …

C#.net MassTransit和DotNetCore.CAP區別

MassTransit和DotNetCore.CAP對比 https://github.com/MassTransit/MassTransit https://github.com/dotnetcore/CAP MassTransit和DotNetCore.CAP是兩種不同的.NET庫,它們在核心概念、設計目的和技術實現等方面存在差異。具體分析如下: 核心概念 Mas…

idea的代碼沒有提交到倉庫怎么撤回到本地?

代碼已經提交到變更列表但是還沒有push推送到倉庫上,可以用這個方法 點擊日志-右鍵要撤回的記錄-選擇撤銷提交 撤銷的又回到本地變更 當然你只能撤銷自己提交的,別人的你撤銷不了

python-題庫篇-為什么數組下標從0 開始而不是 1

為什么很多編程語言要把 0 作為第一個下標索引,而不是直觀的 1 呢? 這個問題 Dijkstra 已經解答過了,沒錯,就是你知道的 Dijkstra,Dijkstra 最短路徑算法,荷蘭語全名是 Edsger Wybe Dijkstra,于…

定制高溫隧道爐,如何判斷質量好壞

在現代工業生產中,高溫隧道爐扮演著不可或缺的角色。對于特定工藝要求,如陶瓷燒制、金屬熱處理等,定制化的高溫隧道爐更是不可或缺。然而,面對市場上琳瑯滿目的產品,如何判斷高溫隧道爐的質量好壞成為了企業決策者面臨…

js終止遞歸

終止遞歸 1. 實現目標:js 編寫遞歸方法 查找指定節點; 2. 需解決問題:找到所需節點后,遞歸不會終止,直到所有節點遍歷完成后才會停止,會消耗性能 3. 解決方案:優化遞歸方法,在找到…

解決vscode終端不顯示conda環境變量名稱問題【詳細步驟!實測可行!!】

最近在使用Visual Studio Code (VSCode) 時候,發現終端沒有正確顯示激活的conda環境名稱,搜了一下,找到原因,記錄一下,如果有人也遇到同樣的問題,可以收藏一下。 ??分別兩種情況,一是windows系…

一周學會Django5 Python Web開發 - Django5內置Auth認證系統-用戶登錄實現

鋒哥原創的Python Web開發 Django5視頻教程: 2024版 Django5 Python web開發 視頻教程(無廢話版) 玩命更新中~_嗶哩嗶哩_bilibili2024版 Django5 Python web開發 視頻教程(無廢話版) 玩命更新中~共計57條視頻,包括:2024版 Django5 Python we…

JVM學習-內存泄漏

內存泄漏的理解和分類 可達性分析算法來判斷對象是否是不再使用的對象,本質都是判斷一上對象是否還被引用,對于這種情況下,由于代碼的實現不同就會出現很多內存泄漏問題(讓JVM誤以為此對象還在引用,無法回收,造成內存泄…

旭日X3與英偉達Orin NX通過TCP傳輸圖片

觀前提醒:本文主要內容為使用Python在局域網內建立TCP連接并傳輸圖片信息,計算機為一塊旭日X3和一塊英偉達Orin NX。 一、什么是TCP TCP(傳輸控制協議)是一種可靠的、面向連接的協議,它確保數據包的順序傳輸和完整性…

關于教務排課的那些事

在辦學過程中,你是否被如下問題困擾? 1、排課功率低: 為了確保師資資源得到充分利用,教務教師排課要求了解每一個全職和兼職教師,了解每一個人的時刻組織和帶班狀況,因而在排課的時分需求處理很多的信息&a…

【Java數據結構】二叉樹詳解(四)

🔒文章目錄: 1.????前言~🥳🎉🎉🎉 2.給定一個二叉樹, 找到該樹中兩個指定節點的最近公共祖先 2.1第一種思路 2.2第二種思路 3.根據一棵樹的前序遍歷與中序遍歷構造二叉樹 4.根據一棵樹的中序…

vite相關配置

1、vite開發環境和生產環境的環境變量配置 1、環境變量配置 vite本身會直接讀取為什么會讀取,因為含有dotenv第三方庫 ,會直接讀取 .env文件, 2、css模塊化簡單處理 css:{modules:{localsConvention: "camselCaseOnly" // 打包配…

機器學習_決策樹與隨機森林

決策樹是一種常用的監督學習算法,既可以用于分類任務也可以用于回歸任務。決策樹通過遞歸地將數據集劃分成更小的子集,逐步建立樹結構。每個節點對應一個特征,樹的葉子節點表示最終的預測結果。構建決策樹的關鍵是選擇最佳的特征來分割數據&a…

圖文型LED顯示屏的結構與安裝

隨著科技的不斷進步,LED顯示屏已成為商業廣告、公共信息顯示等領域不可或缺的一部分。圖文型LED顯示屏以其獨特的優勢和多樣化的應用場景,受到了市場的廣泛歡迎。本文將詳細介紹圖文型LED顯示屏的結構特點、工作原理以及安裝指南。 1、圖文型LED顯示屏的…

Python項目開發實戰:看圖猜成語小程序(案例教程)

一、項目背景與概述 在現代社會,隨著智能手機的普及和移動互聯網的快速發展,移動應用(App)已經成為人們日常生活中不可或缺的一部分。看圖猜成語作為一種集知識性和娛樂性于一體的游戲,深受大眾喜愛。本項目旨在開發一個基于Python的看圖猜成語小程序,讓用戶能夠通過簡單…

跨境電商|Facebook Marketplace怎么做?

2016 年,Facebook打造了同名平臺 Facebook Marketplace。通過利用 Facebook 現有的龐大客戶群,該平臺取得了立竿見影的成功,每月訪問量將超過 10 億。對于個人賣家和小企業來說,Facebook Marketplace是一個不錯的銷貨渠道&#xf…