C++用位運算實現迴圈移位
轉自:http://www.cnblogs.com/alex4814/archive/2011/09/08/2171862.html
迴圈移位區別於一般移位的是移位時沒有數位的丟失。
迴圈左移時,用從左邊移出的位填充字的右端。
迴圈右移時,用從右邊移出的位填充字的左側。
這種情況在系統程式中時有使用,在一些控制程式中用得也不少。
例如:
a = 01111011,迴圈左移2位的正確結果是: b=11101101
b = a >> (8 - 2); //用來得到正常左移丟失的位和迴圈移位後其正確位置 //b=00000001;
a = a << 2; //a = 11101100
a = a | b; //a = 11101101
如果不是用中間變數 a=(a>>(8-2))|(a<<2)
通用:
總長度N(8 16 32)
迴圈左移n (a >> (N - n)) | (a << n)
迴圈右移n (a << (N - n)) | (a >> n)
相關推薦
C++用位運算實現迴圈移位
轉自:http://www.cnblogs.com/alex4814/archive/2011/09/08/2171862.html 迴圈移位區別於一般移位的是移位時沒有數位的丟失。 迴圈左移時,用從左邊移出的位填充字的右端。 迴圈右移時,用從右邊移出的位填充字的左
c語言用位運算實現兩個數平均數
c語言用位運算實現兩個數平均數 對於十進位制而言,向右移動一位就是除以10, 對於二進位制而言,向右移動一位就是除以2, 對於八進位制而言,向右移動一位就是除以8, 對於十六進位制而言,向右移動一位就是除以16 因為計算機是通過二進位制來計算的,知道這個規律之後我們可以編寫程式碼 int
用位運算實現四則運算之加減乘除(用位運算求一個數的1/3) via Hackbuteer1
esp sub 沒有 正整數 過程 介紹 異或 sin 完成 轉自:http://blog.csdn.net/hackbuteer1/article/details/7390093 ^: 按位異或;&:按位與; | :按位或 計算機系統中,數值一律用補碼來表示:因為
c-1:位運算:實現整數的加減乘除四則運算
首先回憶計算機組成原理學過的內容,數字在機器ALU運算邏輯單元內部是以補碼形式進行運算的,因為補碼有兩個優勢:1、能做到符號位和數值部分一起運算,這樣無需單獨考慮符號。2、能把減法運算轉化為加法運算來處理。3、補碼的沒有正0和負0之分,所以表示範圍比原碼和反碼多1個。問題一: 位運算實現加法不管是十進位制加法
用位運算實現四則運算之加減乘除(用位運算求一個數的1/3)
聽同學百度二面中,不準用四則運算操作符來實現四則運算。一想就想到了計算機組成原理上學過的。位運算的思想可以應用到很多地方,這裡簡單的總結一下用位運算來實現整數的四則運算。加法運算:int AddWithoutArithmetic(int num1,int num2){ if(n
用位運算實現求絕對值-有效避開if-else判斷
一般情況下,如果要我們寫一個求絕對值的函式,我們的實現很有可能會是這樣: template<class T>T abs_Normal(T tNum){ if(tNum >0.0) return tNum; elsereturn-tNum;} 也就
用位運算實現十進位制轉換為二進位制
程式碼如下: 1 #include <iostream> //將十進位制數轉化為二進位制數,位運算的取位操作 2 using namespace std; 3 int main() 4 { 5 unsigned short i; 6
用位運算實現四則運算之加減乘除
//遞迴版本 int _add(int num1,int num2){ int sum,carry; if(num2==0) return num1;//沒有進位的時候完成運算 sum=num1^num2;//完成第一步沒有進位的加法運算
棧~ C++用棧Stack實現數學複合運算
關鍵思想是運算子的優先順序設定,分別使用一個數字棧和一個運算子棧,等到運算子棧為空,運算結束了。 compute.cpp // compute.cpp : Defines the entry point for the console application. // #includ
用位操作實現加法運算
問題描述: 對下面程式碼中的a進行位操作(只能進行位運算),實現輸出OPQ int a = 0x434241; printf("%s\n", (char*)&a); 參考程式碼: #include <stdio.h> int a
c基礎【一】利用位運算實現數字反轉
#include <stdio.h> #include <stdlib.h> int main() { //通過位運算實現數字的反轉(操作的物件必須是整數) unsigned int original =0x123; unsig
C的位運算和移位運算子
4個運算子:與(&)、或(|)、非(~)、異或(^)。 用法一:掩碼(把特定位設定為0) flag &= MASK; 可以用來取餘(%),例如:a = b & 0xf; 等價於:a = b % 16; 用法二:置位(把特定位置為1,其他位不變) flag |= MAS
用位向量實現的集合及其常用運算
這個程式是用位向量來實現的集合,用陣列的下標來表示集合中的元素,而陣列的元素0或1來表示集合有無該元素,因此,它適合於整數集合,且值不是很大的情況。 #include <iostream> #include <assert.h> using nam
C++ 用類封裝實現隊列
pan pub pre () turn ear als sin push 1 #include<stdlib.h> 2 #include <iostream> 3 using std::cout; 4 using std::end
23.位運算實現加法
turn 結果 add urn () pre col body class 1 #include <stdio.h> 2 #include <stdlib.h> 3 4 int add(int a, int b) 5 { 6
C語言位運算遇到的坑
右移 ble 實現 ret ade int 只需要 res 置0 在Data Lab中有一個logicalShift函數給定一個值x和需要移動的位數n,要求只是用運算符:~ & ^ | + << >>,實現邏輯右移運算。思考了很久,然後我寫出
C++ 的位運算:__builtin, bitset
函數 運算 校驗位 end 奇偶校驗位 HR IT strong 與或非 int __builtin_ffs (unsigned int x) 返回二進制表示中 x 的最後一位 \(1\)(最右邊的)是從後向前第幾位,比如 \(7368(1110011001000)\)
指標遞迴調呼叫實現迴圈移位
指標、遞迴實現迴圈以為,以後的迴圈卷積c程式碼的實現,或許可以用得上,關鍵的是現在用C語言實現卷積都實現不了。愁啊,四天後必須解決這個問題。 #include<iostream> using namespace std; int main() { void move(int*,in
c-3:位運算:位運算基本用法
基本操作 1.與運算(AND):0 AND 0 = 0 (全為1才得1) 1 AND 0 = 0
使用位運算實現加減乘除
在不使用+,-,*,/,四則運算子號的情況下,通過基本位運算實現加減乘除四則運算。 1. C++中使用位運算實現加法 首先,我們通過對x和y進行&位運算,得出每一位上的進位。然後對x和y進行^位運算,得出沒有加進位的和。最後將所得的和當做新的x,所得的進位往