补码怎么算,一个数的原码,反码,补码怎么算?

原码就是把原来的数化成2进制 比如10的原码就是00001010,+10的原码是00001010算,最高位的0代表 这个数是正数(最高位就是符号位).-10的原码就是10001010,最高位的1代表这个数是 +10的原码是00001010,那他的反码,补码都和原码相同 也是00001010,原因是正数的原 反 补码相同.

补码怎么算,一个数的原码,反码,补码怎么算?

资料扩展:原码(true form)是一种计算机中对数字的二进制定点表示方法。原码表示法在数值前面增加了一位符号位(即最高位为符号位):正数该位为0,负数该位为1.

计算机中的符号数有三种表示方法,即原码、反码和补码。三种表示方法均有符号位和数值位两部分

  includelt;ht48f30e。
  h;define uint8 unsignedint//8bitdefine uint unsignedint//8bitdefine uint16 unsignedlong//16bitdefine date _pb0//io0int1define dateio_15_0//pbc0define Dispdata _pb7//io0int1define Dispclk _pb6//io0int1uint8constshowtable[29]={0x7e,0x06,0x6d,0x79,0x33,0x5b,0xdf,0x70,0x7f,0x7b,0x77,0x1f,0x4e,0x3d,0x4f,0x47,0x00,0x31,0x07,0x01,0x37,0x0e,0x67,0x63,0x1d,0x15,0x3e,0x4f,0x76};uint8constdotcodeh[]={0,0,1,1,2,3,3,4,5,5,6,6,7,8,8,9};uinttplsb,tpmsb;//温度值低位、高位字节uint16tplmsb;uint16temp@0x50;voiddelay1ms(uint16j){uint8i;while(j){_clrwdt();j–;for(i=0;ilt;168;i++){;}}}voiddisp(uint8t,uint8showdata){unsignedchari,j,temp;for(j=0;jlt;t;j++){ temp=showdata;for(i=0;ilt;7;i++){if(temp0x01){Dispdata=1;//数据为1}else{Dispdata=0;//数据为0}temp;;=1;Dispclk=0;_delay(5);Dispclk=1;_delay(5);}}}voidinit(){uinti;date=1;delay1ms(1);date=0;i=100;//拉低约900uswhile(i;0)i–;date=1;//产生上升沿i=4;while(i;0)i–;}voidwait(){uinti;dateio=1;//改PB5为输入脚while(date);while(~date);//检测到应答脉冲dateio=0;//改PB5为输出脚i=4;while(i;0)i–;}bitreadbit(){uinti;bitb;date=0;_nop();_nop();date=1;dateio=1;//改PB5为输入脚_nop();_nop();_nop();_nop();_nop();_nop();_nop();_nop();_nop();_nop();_nop();_nop();_nop();_nop();_nop();_nop();_nop();_nop();//延时15us以上,读时隙下降沿后15us,DS18B20输出数据才有效b=date;dateio=0;//改PB5为输出脚i=8;while(i;0)i–;return(b);}uintreadbyte(){uinti,j,b;b=0;for(i=1;ilt;=8;i++){j=readbit();b=(jlt;lt;7)(b;;1);//读出的数据最低位在最前面,这样刚好一个字节在DATE里}return(b);}voidwritebyte(uintb){uinti;uintj;bitbtmp;for(j=1;jlt;=8;j++){btmp=b0x01;b=b;;1;//取下一位(由低位向高位)if(btmp)//写1{date=0;_nop();//延时,使得15us以内拉高_nop();_nop();_nop();_nop();_nop();_nop();_nop();_nop();_nop();_nop();_nop();_nop();_nop();_nop();_nop();_nop();_nop();date=1;i=8;while(i;0)i–;//整个写1时隙不低于60us}else//写0{date=0;i=8;while(i;0)i–;//保持低在60us到120us之间date=1;_nop();_nop();_nop();_nop();_nop();_nop();_nop();_nop();_nop();_nop();_nop();_nop();_nop();_nop();_nop();_nop();_nop();_nop();}}}voidmain(){uint8a1,a2,a3,a4=16;uint8m=60,n;_intc=0;_tmrc=0;_wdts=0b00000101;//MOV A,00000101B;512ms_clrwdt(); //MOV WDTS,A_pbc=0x00;delay1ms(1);//延时1msinit();//产生复位脉冲,初始化DS18B20wait();//等待DS18B20给出应答脉冲delay1ms(1);//延时writebyte(0xcc);//跳过rom命令writebyte(0x4e);//写暂存器writebyte(0x32);//上限50°Cwritebyte(0x00);//下限50°Cwritebyte(0x7f);//设置分辨率为12位//writebyte(0x44);//convertT命令delay1ms(1000);//延时1swhile(1){init();//产生复位脉冲,初始化DS18B20wait();//等待DS18B20给出应答脉冲delay1ms(1);//延时writebyte(0xcc);//跳过rom命令writebyte(0x44);//convertT命令delay1ms(1000);init();//产生复位脉冲,初始化DS18B20wait();//等待DS18B20给出应答脉冲delay1ms(1);//延时writebyte(0xcc);//跳过rom命令writebyte(0xbe);//readscratchpad读暂存器命令tplsb=readbyte();//温度值低位字节(其中低4位为二进制的;小数;部分)tpmsb=readbyte();//温度值高位字节(其中高5位为符号位)if(tpmsb;=0xf8){a4=19;tplsb=~tplsb;if(tplsb==0xff){tplsb=0;tpmsb=~tpmsb;++tpmsb;}else{tplsb=tplsb+1;tpmsb=~tpmsb;}}temp=tpmsb;temp=templt;lt;8;//合成一个字temp=temptplsb;a3=temp0x000f;temp=temp;;4;temp=temp0x00ff;a1=temp/10;a2=temp%10;if(a4==19) disp(1,showtable[a4]);disp(1,showtable[a1]);disp(1,showtable[a2]);disp(1,showtable[dotcodeh[a3]]);if(a4==16) disp(1,0);m=60;n=4;}}、、、、、、、、、、、、、、、、、、、、、、、、、、、给你参考而已,自己工作使用过的,子程序一定没有问题。

版权声明:本站部分文章来源互联网,主要目的在于分享信息,版权归原作者所有,本站不拥有所有权,不承担相关法律责任,如有侵权请联系我们,本站将立刻删除。
(0)
上一篇 2022年5月26日 上午6:53
下一篇 2022年5月26日 上午6:53

相关推荐