C語言操作符例題

這里寫目錄標題

  • 例題一
    • 題目解析
  • 例題二
    • 題目解析
  • 例題三
    • 方法一
    • 方法二
    • 方法三
  • 例題四
  • 例題五

感謝各位大佬對我的支持,如果我的文章對你有用,歡迎點擊以下鏈接
🐒🐒🐒 個人主頁
🥸🥸🥸 C語言
🐿?🐿?🐿? C語言例題
🐣🐓🏀 python

例題一

下面代碼的結果是:( )

#include <stdio.h>
int main()
{int a, b, c;a = 5;c = ++a;b = ++c, c++, ++a, a++;b += a++ + c;printf("a = %d b = %d c = %d\n:", a, b, c);return 0;
}

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是先執行++a,也就是a=a+1=6(注意這里是永久改變a的值),然后再執行c=a=6
b=++c,c++,++a,a++這里要注意對于b我們是只算b=++c,所以先執行c=c+1=7
b=c=7,然后再執行后面的c++,++a,a++(后面還是會執行的,只不過和b就沒關系了),最終c=8.a=8
b+=a++ +c先變成b=b+a++ +c再執行a=a+1=9,b=b+a+c=7+8+8=23
最終a=9 b=23 c=8

例題二

不允許創建臨時變量,交換兩個整數的內容

題目解析

我們需要用到按位異或的方法去解決,按位異或在之前我有寫到操作符詳解上(非常詳細)

#include <stdio.h>
int main()
{int a = 10;int b = 20;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);return 0;
}

按位異或就是相同為0不同為1,并且滿足數學的交換規律
對于
一式a=a^b ,二式b=a^b, 三式a=a^b
我們將一式帶入二式,b=a^ b^b,由于b ^b=1,那么最后b=a
而三式a=a^b其實就是a=a ^b ^a,其中a ^b是一式帶入的,利用交換律我們就可以變成a=a ^a ^b,所以最后a=b

例題三

統計二進制中1的個數
代碼解析:

方法一

*/
int NumberOf1(int n)
{int count = 0;while(n){if(n%2==1)count++;n = n/2;//每次除2然后循環判斷}return count;
}
/*

上述方法缺陷:進行了大量的取模以及除法運算,取模和除法運算的效率本來就比較低。
我們看看另外一個思路
一個int類型的數據,對應的二進制一共有32個比特位,可以采用位運算的方式一位一位的檢測,具體如下

方法二


*/
int NumberOf1(unsigned int n)
{int count = 0;int i = 0;for(i=0; i<32; i++){if(((n>>i)&1) == 1)count++;}return count;
}int NumberOf1(int n ) {int j=0;for(int i=1;i<=32;i++){if(n%2)//如果n%2為1就代表個位是1(這里不用判斷十位百位){n=n>>1;j++;}else(如果個位是0就直接右移)n=n>>1;}printf("%d",j);return j;
}/*優點:用位操作代替取模和除法運算,效率稍微比較高缺陷:不論是什么數據,循環都要執行32次

方法三

思路:采用相鄰的兩個數據進行按位與運算
舉例:?
第一次循環:n=9999  
n=n&(n-1)=9999&9998=9998
(10 0111 0000 1111)
(10 0111 0000 1110) 
=(10 0111 0000 1110) 
第二次循環:n=9998 n=n&(n-1)=9998&9997= 9996(10 0111 0000 1110) (10 0111 0000 1101) =(10 0111 0000 1100) 
第三次循環:n=9996 
n=n&(n-1)=9996&9995= 9992
(10 0111 0000 1100) 
(10 0111 0000 1011) 
=(10 0111 0000 1000) 
第四次循環:n=9992   
n=n&(n-1)=9992&9991= 9984
(10 0111 0000 1000) 
(10 0111 0000 0111)
=(10 0111 0000 0000)
第五次循環:n=9984
n=n&(n-1)=9984&9983= 9728
(10 0111 0000 0000)
(10 0110 1111 1111)
=(10 0110 0000 0000)
第六次循環:n=9728   
n=n&(n-1)=9728&9727= 9216
(10 0110 0000 0000)
(10 0101 1111 1111)
=(10 0100 0000 0000)
第七次循環:n=9216   
n=n&(n-1)=9216&9215= 8192
(10 0100 0000 0000)
(10 0011 1111 1111)
=(10 0000 0000 0000)
第八次循環:n=8192   
n=n&(n-1)=8192&8191= 0
(10 0000 0000 0000)
(01 1111 1111 1111)
=(00 0000 0000 0000)可以觀察到:此種方式,數據的二進制比特位中有幾個1,循環就循環幾次
而且中間采用了位運算,處理起來比較高效
*/
int NumberOf1(int n)
{int count = 0;while(n){n = n&(n-1);count++;}return count;
}

例題四

打印整數二進制的奇數位和偶數位
代碼解析:

/*
思路:
1. 提取所有的奇數位,如果該位是1,輸出1,是0則輸出0
2. 以同樣的方式提取偶數位置檢測num中某一位是0還是1的方式:1. 將num向右移動i位2. 將移完位之后的結果與1按位與,如果:結果是0,則第i個比特位是0結果是非0,則第i個比特位是1
*/
void Printbit(int num)
{for(int i=31; i>=1; i-=2){printf("%d ", (num>>i)&1);}printf("\n");for(int i=30; i>=0; i-=2){printf("%d ", (num>>i)&1);}printf("\n");
}

例題五

求兩個數二進制中不同位的個數

#include <stdio.h>int main() {int a, b,sum=0;scanf("%d %d",&a,&b);for(int i=0;i<32;i++){int c=a>>i; int d=b>>i;if((c&1)==(d&1))判斷個位是否相同;elsesum++;}printf("%d",sum);return 0;
}
/*
思路:
1. 先將m和n進行按位異或,此時m和n相同的二進制比特位清零,不同的二進制比特位為1
2. 統計異或完成后結果的二進制比特位中有多少個1即可
*/
#include <stdio.h>
int calc_diff_bit(int m, int n)
{int tmp = m^n;//找出相同的位int count = 0;while(tmp){tmp = tmp&(tmp-1);//和上一題的方法三相同count++;}return count;
}
int main()
{int m,n;while(scanf("%d %d", &m, &n) == 2){printf("%d\n", calc_diff_bit(m, n));}return 0;
}

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

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

相關文章

智能指針(Newbie Note)

智能指針專題 1.普通指針的問題2.智能指針是什么什么是所有權 3.智能指針三個好處&#xff1a;4.C11提供的智能指針4.1 shared_ptr&#xff08;共享所有權指針&#xff09;4.1.1 分配內存4.1.2 成員函數4.1.3 計數情況匯總&#xff1a;4.1.4 示例代碼(計數)4.1.5 示例代碼(rese…

Java深拷貝與淺拷貝技術解析及實例演示

摘要&#xff1a;本文將詳細介紹Java中的深拷貝和淺拷貝概念&#xff0c;通過分析源碼和舉例說明&#xff0c;幫助讀者更好地理解這兩種拷貝方式的區別及應用場景。 一、深拷貝與淺拷貝的概念 深拷貝&#xff1a;復制一個對象后&#xff0c;無論是基本數據類型還是引用類型&…

多柱漢諾塔問題

k柱漢諾塔 題目描述 漢諾塔&#xff08;Hanoi Tower&#xff09;&#xff0c;又稱河內塔。 傳說大梵天創造世界的時候做了三根金剛石柱子&#xff0c;按左、中、右排序。大梵天在左側的柱子上&#xff0c;從下往上按照大小順序摞著64片黃金圓盤&#xff0c;越靠下的圓盤越大。…

個人博客項目 - 測試報告

文章目錄 一、項目背景二、測試報告功能測試1.編寫測試用例2.登錄測試3.編寫文章測試4.查看文章測試5.刪除文章測試7.注銷登錄測試 自動化測試性能測試1.VUG2.進行場景設計3.生成性能測試報告 總結 本文開始 一、項目背景 通過學習測試相關的知識&#xff0c;動手實踐并測試一…

2023 年 亞太賽 APMCM ABC題 國際大學生數學建模挑戰賽 |數學建模完整代碼+建模過程全解全析

當大家面臨著復雜的數學建模問題時&#xff0c;你是否曾經感到茫然無措&#xff1f;作為2022年美國大學生數學建模比賽的O獎得主&#xff0c;我為大家提供了一套優秀的解題思路&#xff0c;讓你輕松應對各種難題。 以五一杯 A題為例子&#xff0c;以下是咱們做的一些想法呀&am…

【Vue】自定義指令

自定義指令 自定義指令就是自己定義的指令&#xff0c;是對 DOM 元素進行底層操作封裝 ,程序化地控制 DOM&#xff0c;拓展額外的功能 全局定義 Vue.directive(指令名字, definition) 指令名&#xff1a;不包括v-前綴&#xff0c;使用時候包括v-&#xff0c;v-指令名defini…

CUTLASS 1.3.3中的 Volta884_h884gemm

CUTLASS 是 CUDA C 模板抽象的集合&#xff0c;用于在 CUDA 內的所有級別和規模上實現高性能矩陣-矩陣乘法 (GEMM) 和相關計算。它采用了類似于 cuBLAS 和 cuDNN 中實現的分層分解和數據移動策略。 CUTLASS 最新版本為3.3&#xff0c;相比1.3.3變動較大。然而重溫一下1.3.3仍然…

生產問題 Recv-Q101

生產上服務端口 Recv-Q101 新請求到服務器的失敗&#xff0c;幸好及時發現&#xff0c;通過重啟服務之后得到解決&#xff0c;具體原因等待排查 目前覺得的原因是&#xff1a;某些請求暫用時間比較久

Linux超簡單部署個人博客

1 安裝halo 1.1 切換到超級用戶 sudo -i 1.2 新建halo文件夾 mkdir ~/halo && cd ~/halo 1.3 編輯docker-compose.yml文件 vim ~/halo/docker-compose.yml 英文輸入法下&#xff0c;按 i version: "3"services:halo:image: halohub/halo:2.10container_…

2017年全國碩士研究生入學統一考試管理類專業學位聯考數學試題——解析版

文章目錄 2017 級考研管理類聯考數學真題解析一、問題求解&#xff08;本大題共 5 小題&#xff0c;每小題 3 分&#xff0c;共 45 分&#xff09;下列每題給出 5 個選項中&#xff0c;只有一個是符合要求的&#xff0c;請在答題卡上將所選擇的字母涂黑。真題&#xff08;2017-…

Python 提高篇學習筆記(一):深拷貝和淺拷貝

文章目錄 一、什么是對象的引用二、深拷貝和淺拷貝2.1 淺拷貝(Shallow Copy)2.2 深拷貝(Deep Copy)2.3 copy.copy和copy.deepcopy的區別 一、什么是對象的引用 在 Python 中&#xff0c;對象的引用是指變量指向內存中某個對象的地址或標識符。當你創建一個新的對象(比如一個整…

[技術雜談]計算機系統硬件類名稱

在各種編程語言都可以見到利用WMI查詢計算機硬件信息&#xff0c;因此知道有哪些計算機硬件名稱非常有必要&#xff0c;下面列舉了所有計算機硬件名稱可以查詢。 本文內容 冷卻設備類輸入設備類大容量存儲類主板、控制器和端口類 顯示另外 6 個 計算機系統硬件類別將表示硬…

git修改遠程分支名稱

先拉取old_branch最新代碼到本地 git checkout old_branchgit pull origin old_branch本地修改后并推送 git branch -m old_branch new_branch # 修改分支名稱git push --delete origin old_branch # 刪除在遠程的老分支推送新分支 git push origin new_branch本地分支與遠…

除自身以外數組的乘積[中等]

優質博文&#xff1a;IT-BLOG-CN 一、題目 給你一個整數數組nums&#xff0c;返回數組answer&#xff0c;其中answer[i]等于nums中除nums[i]之外其余各元素的乘積。題目數據保證數組nums之中任意元素的全部前綴元素和后綴的乘積都在32位整數范圍內。請不要使用除法&#xff0…

【Qt開發流程】之富文本處理

描述 Scribe框架提供了一組類&#xff0c;用于讀取和操作結構化的富文本文檔。與Qt中以前的富文本支持不同&#xff0c;新的類集中在QTextDocument類上&#xff0c;而不是原始文本信息。這使開發者能夠創建和修改結構化的富文本文檔&#xff0c;而不必準備中間標記格式的內容。…

【數據結構】A : A DS圖_傳遞信息

A : A DS圖_傳遞信息 Description 小明在和他的小伙伴們玩傳消息游戲&#xff0c;游戲規則如下&#xff1a; 有n名玩家&#xff0c;所有玩家編號分別為0~n-1&#xff0c;其中小明編號為0&#xff1b;每個玩家都有固定的若干個可傳信息的其他玩家(也可能沒有)。傳消息的關系是…

busybox制作根文件系統2

上篇內容使用busybox制作好了根文件系統&#xff0c;接下來需要進行一些測試和功能的完善&#xff01; 根文件系統的測試 測試根文件系統的時候不是直接燒寫到EMMC里面&#xff0c;這樣測試效率太低了&#xff0c;Ubuntu的rootfs目錄已經保存了根文件系統&#xff0c;只需要在…

向量數據庫,展望AGI時代

無論是向量數據庫&#xff0c;還是大模型&#xff0c;歸根結底&#xff0c;大家在追捧它時的心態&#xff0c;焦慮大于需求。 向量數據庫的熱潮&#xff0c;在一定程度上“外化”了人們的焦慮。 但這并不能否定向量數據庫的實際價值&#xff0c;甚至更長遠來看&#xff0c;向…

【C++】linux下的gdb程序調試

目錄 【C】Linux 下的 GDB 程序調試1. 安裝 GDB2. 編譯程序3. 啟動 GDB4. 設置斷點5. 執行程序6. 調試命令7. 調試崩潰8. 結束調試 【C】Linux 下的 GDB 程序調試 在開發 C 程序時&#xff0c;出現 bug 是常見的。調試是找出程序錯誤的關鍵步驟之一。在 Linux 環境下&#xff…

RedisTemplate使用詳解

RedisTemplate介紹StringRedisTemplate介紹RedisConnectionFactory介紹RedisConnectionFactory源碼解析 RedisOperations介紹RedisOperations源碼解析 RedisTemplate使用連接池配置RedisTemplate連接池連接池配置 RedisTemplate應用場景RedisTemplate主要特點RedisTemplate使用…