位運算與操作符應用

一.二進制與進制轉化

1.概念解析

我們常常能聽見2進制,8進制,16進制這些講法。他們都是數值的不同表達形式。根據不同的進制大小有著不同的權重比例。我們生活中常用的是10進制數,也就是逢10進1,由此推理至其他進制。例如2進制就是逢2進1。

2.進制轉化

(1)10進制轉化為2進制

如圖將10進制的數不斷對進制數進行取模,之后在將數除等原數,周而復始,最后將輸出數導致就是原數轉換的進制數。

?(2)2進制轉8進制

8進制中每一位都是0~7中的數字,0~7的數字各自寫成2進制位最多有3個就足夠了。所以我們將二進制位轉換時,每次只需3位3位的進行轉化。

(3)2進制轉16進制

與上文同理,16進制位是由0~9,A~F直接的數組成的,用2進制表示最多只有4位。

?3.相關技巧與用法

例如給定x進制,x進制形式的數s,要將其轉換為z進制形式。

思路為先將x進制的數s轉化為10進制形式,再將該數轉化為z進制形式。

將x進制的s轉化為10進制形式有兩種方法:

(1)逐位相乘法

int main()
{int x;int i = 0;string s;int ret = 0;cin >> x >> s;int n = s.size() - 1;while (n >= 0){if (s[n] <= '9'){ret += (s[n--] - '0') * pow(x, i);}else{ret += (s[n--] - 'A' + 10) * pow(x, i);}i++;}cout << ret;return 0;
}

將每一位的數乘對應的權重轉化為10進制相加。

(2)庫函數調用

#include <string>
int main()
{int x;string s;cin >> x >> s;int ret = stoi(s, nullptr, x);cout << ret;return 0;
}

這里調用了stoi函數(string? to? int),將字符串轉換為int形式,有三個參數,stoi(const string& str, size_t* idx = 0, int base = 10);。第一個參數為需要轉化的字符串,第二個是一個指針,指向停止轉化的字符;第三個參數是需要轉換的進制(默認情況為10進制)。

在這里我們將字符串s轉化為x進制。

(3)將10進制轉化為z進制

string s = "0123456789ABCDEF";void print(int ret, int m)
{if (ret > m){print(ret / m, m);}cout << s[ret % m];
}

這里我們將10進制數設置為ret,需要轉換的進制為m進制。我們使用一個遞歸,參照上面的(10進制轉化為2進制的思路)。

二.位運算

1.概念解析

這里就做一些簡單的介紹,重點內容在于后序的運用方法。

(1)左移右移操作符

最高的符號位不變,左移將二進制數整體左移動一位右邊補0;右移將二進制整體右移一位,此時分為兩種情況。如果是邏輯右移則左邊用0進行填充,若是算術右移則左邊用符號位進行填充。

(2)&(按位與)? |(按位或)? ^(按位異或)? ~(按位取反)

例a&b當a與b二進制位上都為1,得到的結果為1,否則為0。

例a|b當a與b二進制位上有1則為1,否則為0。

例a^b當a與b二進制位上相同則為0,不相同則為1。

例~a將1變為0,將0變為1。

這里有個小tips:

所有的二進制操作都是先轉化為補碼的形式展開的,正數的原碼反碼補碼都相同,負數將原碼取反加1(符號位不變)得到的就是補碼。

2.位運算的應用

(1)保留二進制位中的指定位

?有時候我們希望取出二進制中的某一位,使其他位變為0。我們只需要將對應的位進行(x&m)處理。

?(2)獲取二進制中的指定位

當我們需要獲取?個整數 x 的?進制中第 i 位(從低到?,以最低位為第 0 位是 1 還是 0 的時
候,我們可以對 x 做這樣的運算: (x >> i) & 1 ,如果結果是 0 ,表?第 i 位是 0 ,如果結果是 1 ,表?第 i 位是 1 。

(3)將指定二進制位設置為1

設置 x ?進制中的某 1 位,也就是將 x ?進制中的第 i 位(從低到?,以最低位為第 0 位置為 1 ,則可以進?下?的運算: x |= (1<<i) ;

?(4)將指定二進制位設置為0

將?個整數 x 的?進制表?中的某 1 位設置為 0 ,其余位置保留原值。也就是將 x 二進制中的第 i 位(從低到?,以最低位為第 0 位)置為 0 ,其他位保持不變,則可以進?下?的運算: x &= ~(1<<i)

我們需要對指定位置設置為0,只需要對該位進行&1處理,而其他位需要&0處理。所以我們先將1移動到要置為0的位置,再按位取反,這樣就只有該位得到0其余位都為1。

?

(5)反轉指定二進制位

使用一個數m,使得m的二進制位中的第i位為1其余設置為0,然后將(x^m)得到反轉后的值。

由于按位取反中,若原數第i位為1,相同異或取反后變為0,若原數為0,與1異或取反后為1。

?(6)將二進制位最右邊的1變為0

我們可以使用x? &(x-1)的方法x - 1讓有1的最低的一位變為了0,而其他位不會改變。將其進行&,就可以消去最右邊的那一位1。

我們可以通過?x? &(x-1)的計算消除一位1,那么如果我們對一個數不斷的進行消除1的操作,套上一個循環,就能計算出這個二進制數中1的個數。

一些其他用途:

這種思路有一個專有名詞叫做位圖(bitmap)。位圖是數據結構操作系統常用的數據結構,他可以高效的快速釋放資源?

(7)只保留二進制位中最右邊的1

有時候,我們需要將?個整數 x 的?進制表?中最右邊的 1 保留下來,其他位都置為 0 ,那么 x
&(-x) ? 就可以得到想要的數字。

(8)異或的巧用

相同的兩個數異或的結果為0;0與任何數x異或的結果為x;同時異或滿足交換律a^b^a == a^a^b;

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

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

相關文章

適配器模式概述

大體介紹 適配器模式&#xff08;Adapter Pattern&#xff09;是一種結構型設計模式&#xff0c;其核心目的是通過提供一個適配器類來使得原本接口不兼容的類可以一起工作。它通過將一個類的接口轉換成客戶端所期望的接口&#xff0c;使得原本因接口不兼容而無法一起工作的類可…

計算機專業考研 408 學科學習方法

計算機專業考研 408 學科涵蓋數據結構、計算機組成原理、操作系統和計算機網絡四門核心課程&#xff0c;內容多且難度大。但只要掌握科學的學習方法&#xff0c;便能化繁為簡&#xff0c;穩步提升。以下為大家詳細介紹 408 學科的學習方法。 一、基礎夯實階段&#xff1a;全面…

C++ 設計模式:命令模式(Command Pattern)

鏈接&#xff1a;C 設計模式 鏈接&#xff1a;C 設計模式 - 訪問器模式 命令模式&#xff08;Command Pattern&#xff09;是一種行為型設計模式&#xff0c;它將請求封裝成一個對象&#xff0c;從而使你可以用不同的請求對客戶進行參數化&#xff0c;對請求排隊或記錄請求日志…

html+css+js網頁設計 美食 美食4個頁面帶js

htmlcssjs網頁設計 美食 美食4個頁面帶js 網頁作品代碼簡單&#xff0c;可使用任意HTML輯軟件&#xff08;如&#xff1a;Dreamweaver、HBuilder、Vscode 、Sublime 、Webstorm、Text 、Notepad 等任意html編輯軟件進行運行及修改編輯等操作&#xff09;。 獲取源碼 1&#…

swagger,showdoc,apifox,Mock 服務,dubbo,ZooKeeper和dubbo的關系

Swagger、ShowDoc 和 Apifox 之間的區別與優勢 Swagger、ShowDoc 和 Apifox 都是用于 API 文檔管理和測試的工具&#xff0c;但它們各有特色和適用場景。以下是詳細的比較&#xff0c;并附上每個工具的具體用法示例。 1. Swagger 特點與優勢&#xff1a; 廣泛采用: Swagger…

邊沿檢測電路漏檢原因分析

邊沿檢測電路漏檢原因分析 常用結構如下&#xff1a; module edge_detect1( input clk, input signal, output pe, //上升沿 output ne, //下降沿 output de //雙邊沿 );reg reg1;always(posedge clk) beginreg1 < signal; endassign pe (~reg1) & signal; assign…

嵌入式硬件雜談(七)IGBT MOS管 三極管應用場景與區別

引言&#xff1a;在現代嵌入式硬件設計中&#xff0c;開關元件作為電路中的重要組成部分&#xff0c;起著至關重要的作用。三種主要的開關元件——IGBT&#xff08;絕緣柵雙極型晶體管&#xff09;、MOSFET&#xff08;金屬氧化物半導體場效應晶體管&#xff09;和三極管&#…

鴻蒙開發:了解正則表達式

前言 從給出的文本中&#xff0c;按照既定的相關規則&#xff0c;匹配出符合的數據&#xff0c;其中的規則就是正則表達式&#xff0c;使用正則表達式&#xff0c;可以使得我們用簡潔的代碼就能實現一定復雜的邏輯&#xff0c;比如判斷一個郵箱賬號是否符合正常的郵箱賬號&…

Kafka的acks機制和ISR列表

Kafka 是一個流行的分布式流處理平臺&#xff0c;用于構建實時數據流管道和應用程序。在 Kafka 中&#xff0c;acks 機制和 ISR&#xff08;In-Sync Replicas&#xff09;列表是兩個重要的概念&#xff0c;它們共同確保消息的持久性和可靠性。 acks 機制 acks 機制是 Kafka 生…

在 Ubuntu 下通過 Docker 部署 Caddy 服務器

嘿&#xff0c;伙伴們&#xff01;今天我們來聊聊如何在 Ubuntu 系統下通過 Docker 部署 Caddy 服務器。Caddy 是一個現代的 Web 服務器&#xff0c;支持自動 HTTPS&#xff0c;簡單易用&#xff0c;特別適合快速搭建網站。而 Docker 則是一個讓你可以隔離和管理應用的神器。結…

計算機網絡?自頂向下方法:網絡層介紹、路由器的組成

網絡層介紹 網絡層服務&#xff1a;網絡層為傳輸層提供主機到主機的通信服務 每一臺主機和路由器都運行網絡層協議 發送終端&#xff1a;將傳輸層報文段封裝到網絡層分組中&#xff0c;發送給邊緣路由器路由器&#xff1a;將分組從輸入鏈路轉發到輸出鏈路接收終端&#xff1…

Linux top指令

top指令概述 top 是 Linux 系統中用于實時監控系統性能和進程信息的命令&#xff0c;功能強大且靈活。它提供了系統資源的動態視圖&#xff0c;包括 CPU、內存、運行中的進程等。 這個指令可以說是Linux中最基本的工具了&#xff0c;用來監視系統的實時運行狀態&#xff0c;類…

Qt監控系統放大招/歷經十幾年迭代完善/多屏幕輔屏預覽/多層級設備樹/網絡登錄和回放

一、前言說明 近期對視頻監控系統做了比較大的更新升級&#xff0c;主要就是三點&#xff0c;第一點就是增加了輔屏預覽&#xff0c;這個也是好多個客戶需要的功能&#xff0c;海康的iVMS-4200客戶端就有這個功能&#xff0c;方便在多個屏幕打開不同的視頻進行查看&#xff0c…

網絡原理(六): UDP 協議

目錄 1. UDP 協議 1.1 協議特點 1.2 協議報文格式 1.2.1 UDP 長度 1.2.2 校驗和 1. UDP 協議 在進行網絡編程時, 我們已經對 UDP 協議進行了簡單了解. 并且應用層的很多操作, 需要調用傳輸層的提供的接口, 基于 socket api 來進行完成的. 1.1 協議特點 UDP 協議具有以…

前端頁面展示本電腦的攝像頭,并使用js獲取攝像頭列表

可以通過 JavaScript 使用 navigator.mediaDevices.enumerateDevices() 獲取電腦上的攝像頭列表。以下是一個示例代碼&#xff0c;可以展示攝像頭列表并選擇進行預覽。 HTML JavaScript 實現攝像頭列表展示和預覽 <!DOCTYPE html> <html lang"zh-CN">…

【漫話機器學習系列】028.CP

Mallows’ Cp&#xff1a;標準化公式解析與應用 Mallows’ Cp 是一種常用的模型選擇工具&#xff0c;用于在一系列候選模型中權衡擬合度和復雜性&#xff0c;幫助我們選擇性能最優的模型。本文將基于其標準化公式展開詳細解析&#xff0c;并探討其應用場景、實現方法、優點與局…

期末算法分析程序填空題

目錄 5-1 最小生成樹&#xff08;普里姆算法&#xff09; 5-2 快速排序&#xff08;分治法&#xff09; 輸入樣例&#xff1a; 輸出樣例&#xff1a; 5-3 歸并排序(遞歸法) 輸入樣例&#xff1a; 輸出樣例&#xff1a; 5-4 求解編輯距離問題&#xff08;動態規劃法&#xff09;…

深入解析 Conda 安裝的默認依賴包及其作用:conda create安裝了哪些包(中英雙語)

深入解析 Conda 安裝的默認依賴包及其作用 當我們使用 Conda 創建新環境時&#xff0c;例如執行命令&#xff1a; conda create -n olmes python3.10Conda 會自動為我們安裝一系列基礎依賴包&#xff0c;保證 Python 環境能夠正常運行。這些包不僅是我們開發的基礎工具&#…

Mac、Linux命令

Linux 查本機IP&#xff1a;ip addr 查詢文件里符合條件的字符串&#xff1a;grep Mac 查本機IP&#xff1a;ipconfig

Visual Studio 中增加的AI功能

前言&#xff1a; 人工智能的發展&#xff0c;在現在&#xff0c;編程技術的IDE里面也融合了AI的基本操做。本例&#xff0c;以微軟的Visual Studio中的人工智能的功能介紹例子。 本例的環境&#xff1a; Visual Studio 17.12 1 AI 智能變量檢測&#xff1a; 上圖展示了一…