[ C 文章收集] Bitwise Operation - 程式扎記
文章推薦指數: 80 %
接下來要介紹位元運算的一些用途. Bitwise operator 介紹: * << SHIFT LEFT , >> ...
標籤
[英文學習]
[計算機概論]
[深入雲計算]
[雜七雜八]
[AlgorithminJava]
[DataStructureswithJava]
[IRClass]
[Java文章收集]
[Java代碼範本]
[Java套件]
[JVM應用]
[LFDNote]
[MangoDB]
[MathCC]
[MongoDB]
[MySQL小學堂]
[Python考題]
[Python常見問題]
[Python範例代碼]
[心得扎記]
[網路教學]
[C常見考題]
[C範例代碼]
[C/C++範例代碼]
[IntroAlg]
[Java代碼範本]
[Java套件]
[Linux小技巧]
[Linux小學堂]
[Linux命令]
[MLInAction]
[ML]
[MLP]
[Postgres]
[Python學習筆記]
[QuickPython]
[SoftwareEngineering]
[Thepythontutorial]
工具收集
設計模式
資料結構
ActiveMQInAction
AI
Algorithm
Android
Ansible
AWS
BigData研究
C/C++
C++
CCDH
CI/CD
Coursera
Database
DB
DesignPattern
DeviceDriverProgramming
Docker
Docker工具
DockerPractice
Eclipse
EnglishWriting
ExtJS3.x
FP
FraudPrevention
FreeBSD
GCC
Git
GitPro
GNU
Golang
Gradle
Groovy
Hadoop
Hadoop.HadoopEcosystem
Java
JavaFramework
JavaUI
JavaIDE
JavaScript
Jenkins
JFreeChart
Kaggle
Kali/Metasploit
Keras
KVM
LearnSpark
LeetCode
Linux
Lucene
Math
ML
MLUdemy
MPI
Nachos
Network
NLP
nodejs
OO
OpenCL
OpenMP
OSC
OSGi
Pandas
Perl
PostgreSQL
PyDS
Python
Python自製工具
PythonStdLibrary
Pythontools
QEMU
R
RealPython
RIA
RTC
Ruby
RubyPackages
Scala
ScalaIA
SQLAlchemy
TensorFlow
Tools
UML
Unix
Verilog
Vmware
Windows技巧
wxPython
2011年5月25日星期三
[C文章收集]BitwiseOperation
轉載自 這裡
前言:
歡迎來到二進位的世界。
電腦資料都是以二進位儲存,想當然程式語言的變數也都是以二進位儲存。
在C/C++當中有幾個位元運算子:<
接下來要介紹位元運算的一些用途.
Bitwiseoperator介紹:
*<
至於往右移動也是類似道理,變成了除法而已.由於電腦進行位元運算比乘法、除法運算快上許多,所以有很多專業的程式設計師,會利用位元運算來取代乘法、除法運算.優點是程式執行效率增加,缺點是程式碼可讀性變低. 範例如下:
viewplaincopytoclipboardprint?int n= 5;
n=n>> 1; //即是n=n/2之意。
/*該式子也可寫成n>>=1或n/=2。
*/
*&AND
0&0=0
0&1=0
1&0=0
1&1=1& 的功能是將兩個變數對應的位元進行AND邏輯運算,然後產生新變數.&的特色,就是可以判斷出位元是不是1.例如我們想要數一個變數有幾個位元是1,則可以如下操作:
viewplaincopytoclipboardprint?int n= 19; //待測數
int digit=sizeof(n)* 8; //待測數為幾位元.
int c= 0; //Counter
for(int i=0;i
{
if(n&(1<
}
printf("Result:%d\n",c);
*|OR
0|0=0
0|1=1
1|0=1
1|1=1| 的功能是將兩個變數對應的位元進行OR邏輯運算,然後產生新變數.其特色,就是把位元強制標記成1.例如我們想要把五位數標成1:
viewplaincopytoclipboardprint?int mark_5th_bit(int n)
{
return n|(1 <>31=111...111(如果x是負數)or000...000(如果x是正數)
//x^(x>>31) =>如果x為負數則將x的0轉1,1轉0,如果x為正數,則保持x不變.
//(x^(x>>31))-(x>>31)=>如果x為正數則x-0=x,如果x為負數則~x-(-1)=-x
return (x^(x>> 31))-(x>> 31);
}
-最低位的位元1
viewplaincopytoclipboardprint?int lowest_bit_1(int x)
{
return x&-x;
}
-判斷一個整數是不是2的次方
viewplaincopytoclipboardprint?boolis_power_of_2(int x)
{
return (x&-x)==x;
}
-交換兩個int變數
viewplaincopytoclipboardprint?void swap(int&x, int&y)
{
x=x^y; //x'=x^y
y=x^y; //y'=x'^y=x^y^y=x
x=x^y; //x=x'^y'=x^y^x=y
}
-計算有幾個位元是1(32位元整數)
viewplaincopytoclipboardprint?int count_bits(int x)
{
x=(x& 0x55555555)+((x& 0xaaaaaaaa)>> 1);
x=(x& 0x33333333)+((x& 0xcccccccc)>> 2);
x=(x& 0x0f0f0f0f)+((x& 0xf0f0f0f0)>> 4);
x=(x& 0x00ff00ff)+((x& 0xff00ff00)>> 8);
x=(x& 0x0000ffff)+((x& 0xffff0000)>> 16);
return x;
}
int count_bits2(unsigned int n){
int i=0;
for (;n!= 0;n>>= 1)
if (n& 1)
++i;
return i;
}
-顛倒位元順序(32位元整數)
viewplaincopytoclipboardprint?int reverse_bits(int x)
{
x=((x>> 1)& 0x55555555)|((x<> 2)& 0x33333333)|((x<> 4)& 0x0f0f0f0f)|((x<> 8)& 0x00ff00ff)|((x<> 16)& 0x0000ffff)|((x<>SHIFTRIGHT、&AND、...
[VerilogTutorial]行為模型的敘述:always,if/else,case與forloop
Preface: 在這個階層中,我們只需考慮電路模組的功能,而不需考慮其硬體的詳細內容.Verilog的時序控制為以事件為基礎的時序控制: * 接線或暫存器的值被改變。
* 模組的輸入埠接收到新的值* 正規...
[Linux命令]du:顯示目錄或是檔案的大小
屬性: 系統相關-檔案與目錄 語法: du[參數][檔案] 參數|功能 -a|顯示目錄中個別檔案的大小-b|以bytes為單位顯示-c|顯示個別檔案大小與總和-D|顯示符號鏈結的來源檔大小-h|Hum...
延伸文章資訊
- 1Bitwise operation - Wikipedia
In computer programming, a bitwise operation operates on a bit string, a bit array or a binary nu...
- 2Bitwise Operators in C/C++ - GeeksforGeeks
The | (bitwise OR) in C or C++ takes two numbers as operands and does OR on every bit of two numb...
- 3Understanding Bitwise Operators - Code
Bitwise operators are operators (just like +, *, &&, etc.) that operate on ints and uints at the ...
- 4Bitwise Operators in C | GATE Notes - Byju's
- 5Bitwise Operators in C: AND, OR, XOR, Shift & Complement - Guru99