位運算的應用

来源:https://www.cnblogs.com/Little-Turtle--QJY/archive/2020/02/13/12305419.html
-Advertisement-
Play Games

一、判斷一個數字X的i位是不是1 二、把一個數字二進位下的第i位改成1 三、把一個數字二進位下的最靠右的第一個1改成0(去掉) ...


一、判斷一個數字X的i位是不是1

方法:

   if((1 << (i-1)) & x > 0)  原理:   1左移(i-1)位,相當於製造了一個就i位上是1其他位都是0的一個二進位數。將這個數與X進行“與”運算,如果大於0,則代表第i位是1;否則是0
例子:   x = 13 (1101)2  i = 3  ∴ 1 << (i-1) = 1 << 2 = 1002 = 01002 (補上0)  ∴ (1 << (i-1)) & x  = 01002 & 11012  = 01002   因為其0100大於0,所以這i位是1

二、把一個數字二進位下的第i位改成1

方法:

   x = x | (1 << (i-1)) 

原理:

  與“一”類似,直接看”例子“吧  

例子:

  x = 13 (1101)2  i = 2

 ∴ 1 << (i-1) = 1 << 1 = 102 = 00102

 ∴ x | (1 << (i-1))

 = 11012 | 00102

 = 11112

三、把一個數字二進位下的最靠右的第一個1改成0(去掉

方法:

   x = x & (x-1) 

原理:

十進位下的數減了1後,二進位下的數最右邊的1肯定會變成0,所以通過“與”一下就可以把最靠右的第一個1改成0

例子:

  x = 13 (1101)2

 ∴ x-1 = 12 = 11002

 ∴ x & (x-1)

 = 1101& 11002

 = 11002


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • CAP定理: 在一個分散式系統中,Consistency(數據一致性)、 Availability(服務可用性)、Partition tolerance(分區容錯性),三者不可兼得。 一致性(Consistency) 在分散式系統中的所有數據備份(副本),在同一時刻數據的值是否一致。(等同於所有節點 ...
  • 當你第一次定義Protocol Buffer的消息的時候,你肯定會給消息設定一套規則需求。但是隨著時間的推進,你的業務可能會發生了變化,與此同時,你的Protocol Buffer消息類型的需求也會隨之變化。 也就是說:有一些欄位可能會發生變化,可能會添加一些欄位,也可能會刪除一些欄位。但是可能有很 ...
  • 00.瞭解反射 請從記憶體的角度分析對象創建的過程 1.找到主函數所在的類,該類.class載入到方法區,通過反射調用這個主方法,方法進棧 01.瞭解IDE,類路徑 02.位元組碼對象Class 源代碼部分截圖: 知識點1: 3種獲取Class位元組碼對象的方式及優缺點 知識點2: 通過位元組碼Class創 ...
  • 前言 今天一番在22:30開始準備今日的日更,冒著極大的斷更風險,研究了一個開源項目,批量下載手機壁紙。 因為一番每天都為文章開頭的配圖撓頭,正向從網上批量抓取一些美圖,以充實庫存。 剛好,一番昨日的文章里有這麼一個抓取手機背景圖片的開源項目,於是一番今天嘗試了下。 要知道,一般調試一段未知代碼,一 ...
  • 一、cookie的保存與讀取 1.cookie的保存-FileCookie.Jar from urllib import request,parse from http import cookiejar #創建cookiejar實例 filename = "cookie.txt" cookie = ...
  • JavaSE學習筆記(12) 線程 多線程 併發與並行 併發 :指兩個或多個事件在 同一個時間段內 發生。 並行 :指兩個或多個事件在 同一時刻 發生(同時發生)。 在操作系統中,安裝了多個程式,併發指的是在一段時間內巨集觀上有多個程式同時運行,這在單 CPU 系統中,每一時刻只能有一道程式執行,即微 ...
  • MySQL官方對索引的定義為:索引(Index)是幫助MySQL高效獲取數據的數據結構。 資料庫查詢是資料庫的最主要功能之一,我們都希望查詢數據的速度能儘可能的快,因此資料庫系統的設計者會從查詢演算法的角度進行優化,這篇文章對索引做一個系統的梳理,希望對大家有幫助。 一、MySQL有哪些索引類型 索引 ...
  • 最近需要設計一個API伺服器,想要把API介面搞得規範一下,就通過網上搜集到了一些資料,以下便是自己的一些理解以及相關的具體實現 本文采用的是spring boot+maven的方案 restful規範 這個規範我在這裡也不打算長篇大論地講解,怎麼說呢,有人喜歡有人討厭,我也不去爭,因為我經驗不多, ...
一周排行
    -Advertisement-
    Play Games
  • Timer是什麼 Timer 是一種用於創建定期粒度行為的機制。 與標準的 .NET System.Threading.Timer 類相似,Orleans 的 Timer 允許在一段時間後執行特定的操作,或者在特定的時間間隔內重覆執行操作。 它在分散式系統中具有重要作用,特別是在處理需要周期性執行的 ...
  • 前言 相信很多做WPF開發的小伙伴都遇到過表格類的需求,雖然現有的Grid控制項也能實現,但是使用起來的體驗感並不好,比如要實現一個Excel中的表格效果,估計你能想到的第一個方法就是套Border控制項,用這種方法你需要控制每個Border的邊框,並且在一堆Bordr中找到Grid.Row,Grid. ...
  • .NET C#程式啟動閃退,目錄導致的問題 這是第2次踩這個坑了,很小的編程細節,容易忽略,所以寫個博客,分享給大家。 1.第一次坑:是windows 系統把程式運行成服務,找不到配置文件,原因是以服務運行它的工作目錄是在C:\Windows\System32 2.本次坑:WPF桌面程式通過註冊表設 ...
  • 在分散式系統中,數據的持久化是至關重要的一環。 Orleans 7 引入了強大的持久化功能,使得在分散式環境下管理數據變得更加輕鬆和可靠。 本文將介紹什麼是 Orleans 7 的持久化,如何設置它以及相應的代碼示例。 什麼是 Orleans 7 的持久化? Orleans 7 的持久化是指將 Or ...
  • 前言 .NET Feature Management 是一個用於管理應用程式功能的庫,它可以幫助開發人員在應用程式中輕鬆地添加、移除和管理功能。使用 Feature Management,開發人員可以根據不同用戶、環境或其他條件來動態地控制應用程式中的功能。這使得開發人員可以更靈活地管理應用程式的功 ...
  • 在 WPF 應用程式中,拖放操作是實現用戶交互的重要組成部分。通過拖放操作,用戶可以輕鬆地將數據從一個位置移動到另一個位置,或者將控制項從一個容器移動到另一個容器。然而,WPF 中預設的拖放操作可能並不是那麼好用。為瞭解決這個問題,我們可以自定義一個 Panel 來實現更簡單的拖拽操作。 自定義 Pa ...
  • 在實際使用中,由於涉及到不同編程語言之間互相調用,導致C++ 中的OpenCV與C#中的OpenCvSharp 圖像數據在不同編程語言之間難以有效傳遞。在本文中我們將結合OpenCvSharp源碼實現原理,探究兩種數據之間的通信方式。 ...
  • 一、前言 這是一篇搭建許可權管理系統的系列文章。 隨著網路的發展,信息安全對應任何企業來說都越發的重要,而本系列文章將和大家一起一步一步搭建一個全新的許可權管理系統。 說明:由於搭建一個全新的項目過於繁瑣,所有作者將挑選核心代碼和核心思路進行分享。 二、技術選擇 三、開始設計 1、自主搭建vue前端和. ...
  • Csharper中的表達式樹 這節課來瞭解一下表示式樹是什麼? 在C#中,表達式樹是一種數據結構,它可以表示一些代碼塊,如Lambda表達式或查詢表達式。表達式樹使你能夠查看和操作數據,就像你可以查看和操作代碼一樣。它們通常用於創建動態查詢和解析表達式。 一、認識表達式樹 為什麼要這樣說?它和委托有 ...
  • 在使用Django等框架來操作MySQL時,實際上底層還是通過Python來操作的,首先需要安裝一個驅動程式,在Python3中,驅動程式有多種選擇,比如有pymysql以及mysqlclient等。使用pip命令安裝mysqlclient失敗應如何解決? 安裝的python版本說明 機器同時安裝了 ...