二進制中原碼反碼補碼與左移右移
原反補碼
在此之前要了解二進制中的正數和負數
在二進制碼中,采用最高位是符號位的方法來區分正負數,正數的符號位為0、負數的符號位為1
例:
(+10110)B的原碼=(010110)B
(-10110)B的原碼=(110110)B
對于正數而言反碼和補碼一樣,負數則是補碼=(反碼+1)
(+1110)B的原碼=(01110)B 反碼=(00001)B 補碼=(00001)B
(-1110)B的原碼=(11110)B 反碼=(10001)B 補碼=(10010)B
–3(8位二進制) 寫補碼和反碼符號位不變
-3=(1000 0011)B原碼 (1111 1100)B反碼 (1111 1101)B補碼
左移右移
左移是將進制數左移一位 C語言中左移符號:<<
0xff<<1:(1111 1111)B左移一位(1111 1110)B
即移多少位在后面補幾個0;
右移是將進制數左移一位 C語言中左移符號:>>
0xff>>1:(1111 1111)B左移一位(0111 1111)B
即移多少位在前面補幾個0;
若利用移位來控制led燈的流水燈程式
#include<reg52.h> // 頭檔案
#include<intrins.h> //移位函式
#define uchar unsigned char
#define uint unsigned int
#define led P0 //宏定義
uint i;
sbit HC138_A=P2^5; //led燈鎖存器的選通
sbit HC138_B=P2^6;
sbit HC138_C=P2^7;
void delay(uint a) //延時函式
{
while(a--);
}
void ledrun() //流水燈程式
{
for(i=0;i<8;i++)
{
led=~(0x01<<i);
delay(50000);
}
}
void main()
{
P2=0XA0;
P0=0X00;
P2=0X00;
HC138_A=0;
HC138_B=0;
HC138_C=1;
P0=0X01;
while(1)
{
ledrun();
}
}
若想用#include<intrins.h> 移位函式來控制小燈則流水燈程式:
void ledrun()
{
led=_crol_(led,1);
delay(5000);
}
此函式能直接讓移位操作
例:
led=0xb6=1011 0110B
led=_crol_(led,1);
則led=(0110 1101);
右移則同理!
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/272956.html
標籤:其他
上一篇:藍橋杯
下一篇:5G OFDM科普
