常用位操作的c++實現
下面給出其函式宣告及其實現。
//判斷該整數是否是2的整數次方 bool IsPowerOfTwo (unsigned int value); bool IsPowerOfTwo (int value); //求以2為底的結果 unsigned int Log2OfPowerOfTwo (unsigned int powerOfTwo); int Log2OfPowerOfTwo (int powerOfTwo); //判斷兩個數是否異號 bool IsOppositeSigns(int value1,int value2); //不使用分支計算絕對值 unsigned int GetAbs(int value); //大於等於value的最近的二的次方的數 unsigned int NextPowerOfTwo(unsigned int value); //實現 bool IsPowerOfTwo (unsigned int value) { return (value > 0) && ((value & (value - 1)) == 0); } bool IsPowerOfTwo (int value) { return (value > 0) && ((value & (value - 1)) == 0); } unsigned int Log2OfPowerOfTwo (unsigned int powerOfTwo) { unsigned int log2 = (powerOfTwo & 0xAAAAAAAA) != 0; log2 |= ((powerOfTwo & 0xFFFF0000) != 0) << 4; log2 |= ((powerOfTwo & 0xFF00FF00) != 0) << 3; log2 |= ((powerOfTwo & 0xF0F0F0F0) != 0) << 2; log2 |= ((powerOfTwo & 0xCCCCCCCC) != 0) << 1; return log2; } int Log2OfPowerOfTwo (int powerOfTwo) { unsigned int log2 = (powerOfTwo & 0xAAAAAAAA) != 0; log2 |= ((powerOfTwo & 0xFFFF0000) != 0) << 4; log2 |= ((powerOfTwo & 0xFF00FF00) != 0) << 3; log2 |= ((powerOfTwo & 0xF0F0F0F0) != 0) << 2; log2 |= ((powerOfTwo & 0xCCCCCCCC) != 0) << 1; return (int)log2; } bool IsOppositeSigns(int value1,int value2) { return (value1 ^ value2) < 0; } unsigned int GetAbs(int value) { unsigned int r; // the result goes here int const mask = value >> (sizeof(int) * CHAR_BIT - 1); //r = (value + mask) ^ mask; //Patented variation: r = (value ^ mask) - mask; return r; } unsigned int NextPowerOfTwo(unsigned int value) { value--; value |= value >> 1; value |= value >> 2; value |= value >> 4; value |= value >> 8; value |= value >> 16; value++; return value; }
希望對大家有用
相關推薦
常用位操作的c++實現
看到這個標題,可能大家會誤解,其實就是貢獻幾個比較實用的運用位運算實現的操作,這對於加快程式的執行速度很有幫助。具體的實現是參考 下面給出其函式宣告及其實現。//判斷該整數是否是2的
常用排序演算法C++實現
#ifndef SORT_H #define SORT_H class Sort { private: Sort(); Sort(const Sort&); Sort& operator = (const Sort&); te
OpneCV之影象的基本操作:形狀、通道分離/合併、影象混合、相加、位操作——python實現
一、讀入圖片獲得畫素點的畫素值、改變畫素值、改變單個通道畫素值、獲得影象的行、列、影象資料型別、畫素點、ROI區域. import cv2 import numpy as np #讀取一個彩色影象 img = cv2.imread('C:/Users/NWPU/Desktop/1.jpg')
【資料結構】連結串列操作C實現
資料型別的定義 typedef int DataType; typedef struct ListNode { DataType data; struct ListNode *next; } ListNode; 連結串列的初始化和銷燬 連結串列的初
java常用位操作
public class TestIndex { /** * 陣列越界 * 這個方法是java原始碼中常用的一個數組越界的判斷檢測 * 順便複習一下位操作 */ public static int read(byte[] b, in
MKL學習——基本操作C++實現
前言 前面介紹了各種向量-向量,矩陣-向量,矩陣-矩陣的函式簡介。根據自身目前狀況,主要使用實數域的操作,也就是說關注單精度float型別的s和雙精度double型別的d。還有就是用的基本都是全矩陣,沒有經過壓縮,也不是對稱、三角、帶狀的某一種情況。所以主要還
資料結構順序棧和鏈棧基本操作----c++實現
順序棧: #include<iostream> using namespace std; #define MaxSize 50 class SeqStack{ private: int
二叉樹的先序、中序、後序遍歷等基本操作c++實現
二叉樹:樹的每個節點最多有兩個子節點。1.實現二叉連結串列的結構://節點結構template<class T>struct BinaryTreeNode{BinaryTreeNode<T>* _left;//左子樹BinaryTreeNode<
Lua BitOp 提供5.1和5.2版本位操作運算 (跨平臺C語言實現 說明部分1)
BitOp作為The LuaJIT Project中的一個子專案。 Lua BitOp is a C extension module for Lua 5.1/5.2 which adds bitwise operations on numbers. Features 特點
c++ 位操作實現資料標誌位獲取與更新
<strong><span style="font-size:18px;">#include "stdafx.h" #include <iostream> usin
C語言中利用共用體、結構體、位域實現位操作
編寫過51(MCU)程式的同學都知道51架構的MCU支援位操作,這是一個很方便的特性,在讀取/修改暫存器某位的值時非常方便快捷。但其他架構的MCU大多都不支援該特性,即不支援位操作,所在在對暫存器中某一位進行操作的時候都是and/or兩個操作共同使用,在編寫程式時非常麻煩。
C語言復習2之位操作
位操作位操作 位操作是程序設計中對位模式按位或二進制數的一元和二元操作. 在許多古老的微處理器上, 位運算比加減運算略快, 通常位運算比乘除法運算要快很多. 在現代架構中, 情況並非如此:位運算的運算速度通常與加法運算相同(仍然快於乘法運算)。 位運算符 取反(~)是一元運算符, 對一個
C#操作Redis,C#實現Redis分布式鎖
ges mage c# png http 字符串 images red -s 功能描述 字符串常規操作 hashset操作 set操作 keys操作 分布式鎖操作 代碼截圖 購買詳詢:QQ 506023315,只要10元(屌絲籌房中) C#操作Red
求較大整數n的階乘,因為n較大時,n的階乘超出了正常類型的表示範圍,可以采用數組進行操作(c實現)
c語言 n階乘下面鏈接是java的實現,思路叫清晰點http://blog.51cto.com/6631065/2044441 #include <stdio.h> void Print_Factorial ( const int N ); int main() { int N; sc
C#實現的JS操作類實例
www. ora play gpo cursor help tran scrip 文件 本文實例講述了C#實現的JS操作類。分享給大家供大家參考。具體如下: 這個C#類封裝了常用的JS客戶端代碼操作,包括彈出對話框、返回上一頁,通過JS轉向,彈出警告框並轉向等。using
通過位操作實現四則運算
test sub () return expect 意思 define 掌握 功能 在最早學習四則運算的過程中,我們其實就已經掌握了進制算法,這一次我將對二進制運用這個進制算法來實現四則運算。 四則運算 math.c /** * 功能:通過位操作實現四則運算 * 算法:
位操作實現加減乘除四則運算
tle 參與 nbsp pre 圖片 操作數 整數 spa 或操作 解決方案 需要熟練掌握一些常見的位操作實現,具體為: 1)常用的等式:-n=~(n-1)=~n+1 2)獲取整數n的二進制中最後一個1:n&(-n)或者n&~(n-1)如:n=010100,
C# 實現保留兩位小數的方法
decimal span digits con ring git string color tin 1、Math.Round(0.333333,2);//按照四舍五入的國際標準 2、double dbdata=0.335333; string str1=String.For
C++實現算法常用的STL---整理
快排 reat spa 快速 The 第一個元素 c++ 也會 else algorithm sort快排 #include<algorithm> //註意包含algorithm頭文件 #include<iostream> using na
C語言常用庫函數實現
沖突 nbsp 常用 tr1 mov 一個 就會 || 參數 1.strcpy char * strcpy(char *dst,const char *src) { if((dst==NULL)||(src==NULL))