C語言---求一個整數存儲在內存中的二進制中1的個數--3種方法

//編寫代碼實現:求一個整數存儲在內存中的二進制中1的個數
//第一種寫法
/*int count_bit_one(unsigned int n)
{int count = 0;while (n )//除到最后余數是0,那么這個循環就結束了{//這個題就是可以想成求15的二進制的過程//每次都除以2,余數為1的時候就count++if ((n % 2) == 1)//假設輸入的是15count++;n = n / 2;//換下一個數繼續除,直到所有的數除完//15/2=7  7/2=3  3/2=1  1/2=0,四次計算,每次計算的余數都為1}//15的二進制是1111return count; 
}
//對于這部分函數不理解的話可以自己畫出自己一次計算的一個數的二進制的過程int main()
{int num = 0;scanf("%d", &num);int ret = count_bit_one(num);printf("%d\n", ret);return 0;
}*/
但是我們輸入-1,這個輸出結果就有問題了
解決方法:傳過去num,我們用unsigned int n來接收傳過來的數,
使用 unsigned int 在這個函數中是恰當的,因為它確保了函數可以正確處理所有非負整數值,并且避免了有符號整數可能帶來的問題。//第二種算法--不考慮正負號
//-1在內存中的補碼是全1
//11111111111111111111111111111111
//不關心符號的寫法//n&1==1   就說明n的二進制位的最低位是1
//n&1==0   就說明n的二進制位的最低位是0//計算完這一位,想要計算下一位,那么就需要用到
//右移操作符了
//把n的二進制數的每一位都移到最低位
//00000000000000000000000000000001--1的補碼
//因為&的用法是對應的二進制位,
// 有0則為0,兩個同時為1才為1
//如果n的二進制數最低位和1的二進制數最低位產生反應,
//那么兩個1就會場生一個1,
// 如果n的最低位數字是0,那么產生的數字僅僅是0
/*int count_bit_one(int n)
{int count = 0;for (int i = 0; i < 32; i++){//有0則為0,兩個同時為1才為1if ((n >> i) & 1 == 1)//i是從0開始的,也就是最開始的n的最低位//然后利用右移操作符依次變更最低位的數字{count++;//如果結果為1那么就++}   }return count;
}int main()    
{    int num = 0;    scanf("%d", &num);  int ret = count_bit_one(num);   printf("%d\n", ret);    return 0;   
}    *///第三種寫法
//鋪墊
/*
n=11   n=n&(n-1)
二進制
一開始:
n  = 1011
n-1= 1010
賦值后:   
n=n&(n-1),   &有 0就是0,兩個1就是1
得到一個新的n
n  = 1010
n-1 =1001
再次用新得來的n和n-1來為新的n賦值
n=n&(n-1)
n   =    1000
n-1 =    0111
再次賦值
n=n&(n-1)
n=0000n從最開始的1011不斷賦值到0000,
n=n&(n-1)這個方程把n的二進制序列中的最右邊的1去掉了
*///即通過反復應用 n = n & (n - 1); 直到 n 變為0,
// 每次操作清除一個1,計數器增加1,最后得到1的總數。int count_bit_one(int n)
{int count = 0;int i = 0;while (n)//循環停下來的時候n就變成0了{n = n & (n - 1);//執行一次就會去掉一個1count++;}return count;
}int main()
{int num = 0;scanf("%d", &num);int ret = count_bit_one(num);printf("%d\n", ret);return 0;
}    每次執行 n = n & (n - 1); 都會減少 n 的二進制表示中1的個數,直到沒有1剩下,此時 n 變為0,循環結束。

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

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

相關文章

跟小伙伴們說一下

因為很忙&#xff0c;有一段時間沒有更新了&#xff0c;這次先把菜鳥教程停更一下&#xff0c;因為自己要查缺補漏一些細節問題&#xff0c;而且為了方便大家0基礎也想學C語言&#xff0c;這里打算給大家開一個免費專欄&#xff0c;這里大家就可以好好學習啦&#xff0c;哪怕0基…

面試題·棧和隊列的相互實現·詳解

A. 用隊列實現棧 用隊列實現棧 實現代碼如下 看著是隊列&#xff0c;其實實際實現更接近數組模擬 typedef struct {int* queue1; // 第一個隊列int* queue2; // 第二個隊列int size; // 棧的大小int front1, rear1, front2, rear2; // 兩個隊列的首尾指針 } MyS…

圖像處理ASIC設計方法 筆記25 紅外成像技術:未來視覺的革命

在當今科技飛速發展的時代,紅外成像技術以其獨特的優勢,在醫療、工業檢測等多個領域扮演著越來越重要的角色。本章節(P146 第7章紅外焦平面非均勻性校正SoC)將深入探討紅外成像系統中的關鍵技術——非均勻性校正SoC,以及它如何推動紅外成像技術邁向新的高度。 紅外成像系統…

6.Redis之String命令

1.String類型基本介紹 redis 所有的 key 都是字符串, value 的類型是存在差異的~~ 一般來說,redis 遇到亂碼問題的概率更小~~ Redis 中的字符串,直接就是按照二進制數據的方式存儲的. (不會做任何的編碼轉換【講 mysql 的時候,知道 mysql 默認的字符集, 是拉丁文,插入中文…

Jenkins--從入門到入土

Jenkins–從入門到入土 文章目錄 Jenkins--從入門到入土〇、概念提要--什么是CI/DI&#xff1f;1、CI&#xff08;Continuous Integration&#xff0c;持續集成&#xff09;2、DI&#xff08;DevOps Integration&#xff0c;DevOps 集成&#xff09;3、解決的問題 一、Jenkins安…

iOS 開發系列:基于VNRecognizeTextRequest識別圖片文字

1.添加Vision Kit依賴 在項目設置中點擊"General"選項卡&#xff0c;然后在"Frameworks, Libraries, and Embedded Content"&#xff08;框架、庫和嵌入內容&#xff09;部分&#xff0c;點擊""按鈕。搜索并選擇"Vision.framework"。…

[AIGC] flink sql 消費kafka消息,然后寫到mysql中的demo

這是一個使用 Flink SQL 從 Kafka 中消費數據并寫入 MySQL 的示例。在這個示例中&#xff0c;我們將假設有一個 Kafka 主題 “input_topic”&#xff0c;它產生格式為 (user_id: int, item_id: int, behavior: string, timestamp: long) 的數據&#xff0c;我們需要把這些數據寫…

world machine學習筆記(4)

選擇設備&#xff1a; select acpect&#xff1a; heading&#xff1a;太陽的方向 elevation&#xff1a;太陽的高度 select colour&#xff1a;選擇顏色 select convexity&#xff1a;選擇突起&#xff08;曲率&#xff09; select height&#xff1a;選擇高度 falloff&a…

用常識滾雪球:拼多多的內生價值,九年的變與不變

2024年5月22日&#xff0c;拼多多公布了今年一季度財報&#xff0c;該季度拼多多集團營收868.1億元&#xff0c;同比增長131%&#xff0c;利潤306.0億&#xff0c;同比增長了202%&#xff0c;數據亮眼。 市場對拼多多經歷了“看不見”、“看不懂”、“跟不上”三個階段。拼多多…

Vue.js條件渲染與列表渲染指南

title: Vue.js條件渲染與列表渲染指南 date: 2024/5/26 20:11:49 updated: 2024/5/26 20:11:49 categories: 前端開發 tags: VueJS前端開發數據綁定列表渲染狀態管理路由配置性能優化 第1章&#xff1a;Vue.js基礎與環境設置 1.1 Vue.js簡介 Vue.js (讀音&#xff1a;/vju…

SwiftUI中的Slider的基本使用

在SwiftUI中&#xff0c;可以使用Slider視圖創建一個滑動條&#xff0c;允許用戶從范圍中選擇一個值。通過系統提供的Slider&#xff0c;用起來也很方便。 Slider 先看一個最簡單的初始化方法&#xff1a; State private var sliderValue: Float 100var body: some View {V…

[AIGC] mac os 中 .DS_Store 是什么

.DS_Store 是在 MacOS 系統中由 Finder 應用程序創建和維護的一種隱藏文件&#xff0c;用于保存有關其所在目錄的自定義屬性&#xff0c;例如圖標位置或背景顏色。 “.DS_Store” 是 “Desktop Services Store” 的縮寫。 .DS_Store 的作用 .DS_Store 文件在每個 Mac OS X 文…

ollama 使用,以及指定模型下載地址

ollama windows 使用 官網&#xff1a; https://ollama.com/ windows 指定 models 下載地址 默認會下載在C盤 &#xff0c;占用空間 在Windows系統中&#xff0c;可以通過設置環境變量OLLAMA_MODELS來指定模型文件的下載和存儲路徑。具體操作步驟如下&#xff1a; 1.打開系統…

【python006】miniconda3環境搭建(非root目錄,最近更新中)

1.熟悉、梳理、總結項目研發實戰中的Python開發日常使用中的問題。 2.歡迎點贊、關注、批評、指正&#xff0c;互三走起來&#xff0c;小手動起來&#xff01; 文章目錄 1.背景介紹2. 1.背景介紹 環境移植&#xff0c;可能影響部署本機環境信息&#xff0c;探索、總結移植有效…

輕量化微調相關學習

輕量化微調&#xff08;Lightweight Fine-Tuning&#xff09;是指在大型預訓練模型基礎上&#xff0c;通過修改或添加少量參數來進行模型適應性調整的一種方法&#xff0c;旨在減少計算資源消耗和避免過擬合問題&#xff0c;同時保持模型的性能。這種方法特別適用于資源有限或需…

一個程序員的牢獄生涯(36)夾帶

星期一 夾 帶 鄭所和小X州在小院子里說著話,盡管我豎起耳朵想要聽到他們的說話內容。但因為他們的說話聲音很低,我努力半天后,什么都聽不清。只能看到小X州恭恭敬敬的站在鄭所面前,不時地點頭答應著的樣子。 沒過多長時間,小X州從院子里返回了號子。我注意到他的臉上帶著一…

15、設計模式之責任鏈模式

責任鏈模式 顧名思義&#xff0c;責任鏈模式&#xff08;Chain of Responsibility Pattern&#xff09;為請求創建了一個接收者對象的鏈。這種模式給予請求的類型&#xff0c;對請求的發送者和接收者進行解耦。這種類型的設計模式屬于行為型模式。 在這種模式中&#xff0c;通…

搜索引擎--ES基礎概念

ES是一款開源的搜索引擎&#xff0c;相比于mysql&#xff0c;它提供了非常強大的搜索功能 下面我們需要簡單的了解一下ES相比于mysql中的一些基本概念的區別&#xff1a; 首先我們要知道es在存儲數據的時候都是以json格式來存儲的 mysql <------> ES&#xff1a; table…

【九十四】【算法分析與設計】練習四蠻力法練習,排列問題和組合問題,求解最大連續子序列和問題,求解冪集問題,求解0/1背包問題,求解任務分配問題

求解最大連續子序列和問題 給定一個有n&#xff08;n≥1&#xff09;個整數的序列&#xff0c;要求求出其中最大連續子序列的和。 例如&#xff1a; 序列&#xff08;-2&#xff0c;11&#xff0c;-4&#xff0c;13&#xff0c;-5&#xff0c;-2&#xff09;的最大子序列和為20…

pymysql.err.OperationalError: (1030, ‘Got error 168 from storage engine‘)

錯誤 pymysql.err.OperationalError: (1030, Got error 168 from storage engine) 通常與MySQL的InnoDB存儲引擎相關&#xff0c;它指示你試圖進行的操作超出了存儲引擎的能力或資源限制。具體來說&#xff0c;MySQL錯誤代碼168&#xff08;或“ER_TABLE_NEEDS_UPGRADE”&#…