Zi 字媒體
2017-07-25T20:27:27+00:00
C/C++/C#/JAVA 邏輯(位元)運算 應用
資料來源: https://edisonx.pixnet.net/blog/post/34033421
線上執行: http://codepad.org/ / https://www.tutorialspoint.com/compile_c_online.php
01. 符號
(1.1) NOT (~):反相位元, 取補數
(1.2) AND (&):有0則0, a&0=0, a&1=1
(1.3) OR (|):有1則1, a|0 =a, a^1=1
(1.4) XOR (^):奇1則1, a^0=a, a^1=~a
(1.5) >> :向右移位, a >> n 即 a 向右移 n 個 bits
(1.6) << :向左移位, a << n 即 a 向左移 n 個 bits.
02. 乘以2的n次方
#include
int main()
{
int a, b;
b=1;
a = b*128;
printf("a =%d\n",a);
b=1;
a = b << 7; // 128 = 2^7
printf("a =%d\n",a);
return 0;
}
03. 除以 2 的 n 次方
#include
int main()
{
int a, b;
b=256;
a = b / 128;
printf("a =%d\n",a);
b=256;
a = b >> 7; // 128 = 2^7
printf("a =%d\n",a);
return 0;
}
04. 交換二整數(int, unsigned, char)數值
#include
int main()
{
int a=10, b=5;
printf("a =%d,b=%d\n",a,b);
a^=b;
b^=a;
a^=b;
// 較不佳寫法:a^=b^=a^=b;
printf("a =%d,b=%d\n",a,b);
return 0;
}
05. 判斷是否為奇數 (mask)
#include
int main()
{
int a=10,b=-1;
if(a%2==0) // return 1, 奇數
{
b=1;
}
else // return 0, 偶數
{
b=0;
}
printf("b=%d\n",b);
a=10;
if((a&(0x01))==0) // return 1, 奇數
{
b=1;
}
else // return 0, 偶數
{
b=0;
}
printf("b=%d\n",b);
}
06. 整數(int) 取負數(變號)
#include
int main()
{
int a, b;
a=10;
b = -a;
printf("b=%d\n",b);
a=10;
b = ~a+1;
printf("b=%d\n",b);
a=10;
b = (a ^ -1) + 1;
printf("b=%d\n",b);
}
07. 取2的n次方餘數
#include
int main()
{
int a, b, c;
b=157;
c=8;
a = b % c; // c = 2^n
printf("a=%d\n",a);
a = b & (c-1);
printf("a=%d\n",a);
}
08. 判斷是否為2的n次方
#include
int main()
{
int a=128,b=-1;
if( (a & -a) == a) // return 1, 為2之n方
{
b=1;
}
else // return 0, 非2之n方
{
b=0;
}
printf("b=%d\n",b);
}
09. 遞增運算子與遞減運算子
#include
int main()
{
int a;
a=10;
a = -~a; //a++;
printf("a=%d\n",a);
a = ~-a; // a--;
printf("a=%d\n",a);
}
10. 取低4bits位元(mask)
#include
int main()
{
unsigned a, b;
a=255;
b = a & 0x0f; // a取低4bits給b
printf("b=%d\n",b);
}
11. 取高4bits位元(mask)
#include
int main()
{
unsigned a, b;
a=255-128;
b = a&(0xf0); // a 取高4bits 給b
printf("b=%d\n",b);
b=b>>4;
printf("b=%d\n",b);
}
12. 取絕對值
#include
int main()
{
int a, b; // assume int has 4 bytes.
a=0;
b=-10;
a = b<0 ? -b : b;
printf("a=%d\n",a);
b=-100;
a = (b ^ (b>>31)) - (b >> 31);
printf("a=%d\n",a);
}
13. 比較是否同號
#include
int main()
{
int a, b, equ;
a=10;
b=20;
equ=-1;
if((a*b) > 0)
{
equ = 1;
}
else
{
equ = 0;
}
printf("equ = %d\n",equ);
if((a^b) > 0)
{
equ = 1;
}
else
{
equ = 0;
}
printf("equ = %d\n",equ);
}
心得:
基本四則運算都可以用邏輯電路實現
寫了
5860316篇文章,獲得
23313次喜歡