【2021-04-05】二进制中的原码反码补码与二进制数的左移右移

   日期:2021-04-06     浏览:103    评论:0    
核心提示:二进制中原码补码与左移右移

二进制中原码反码补码与左移右移

原反补码

在此之前要了解二进制中的正数和负数

在二进制码中,采用最高位是符号位的方法来区分正负数,正数的符号位为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);

右移则同理!

 
打赏
 本文转载自:网络 
所有权利归属于原作者,如文章来源标示错误或侵犯了您的权利请联系微信13520258486
更多>最近资讯中心
更多>最新资讯中心
更多>相关资讯中心
0相关评论

推荐图文
推荐资讯中心
点击排行
最新信息
新手指南
采购商服务
供应商服务
交易安全
关注我们
手机网站:
新浪微博:
微信关注:

13520258486

周一至周五 9:00-18:00
(其他时间联系在线客服)

24小时在线客服