8个0的源码
① 单片机流水灯C语言程序(8个灯,依次点亮每个灯,延时500MS)
单片机流水灯C语言程序的源代码如下:
#include //51系列单片机定义文件
#define uchar unsigned char //定义无符号字符
#define uint unsigned int //定义无符号整数
void delay(uint); //声明延时函数
void main(void)
{
uint i;
uchar temp;
while(1)
{
temp=0x01;
for(i=0;i<8;i++) //8个流水灯逐个闪动
{
P1=~temp;
delay(100); //调用延时函数
temp<<=1;
}
temp=0x80;
for(i=0;i<8;i++) //8个流水灯反向逐个闪动
{
P1=~temp;
delay(100); //调用延时函数
temp>>=1;
}
temp=0xFE;
for(i=0;i<8;i++) //8个流水灯依次全部点亮
{
P1=temp;
delay(100); //调用延时函数
temp<<=1;
}
temp=0x7F;
for(i=0;i<8;i++) //8个流水灯依次反向全部点亮
{
P1=temp;
delay(100); //调用延时函数
temp>>=1;
}
void delay(uint t) //定义延时函数
{
register uint bt;
for(;t;t--)
for(bt=0;bt<255;bt++);
}
(1)8个0的源码扩展阅读
51单片机流水灯的源代码如下
#include<reg51.h>
#include<intrins.h>
voiddelay(inta)
{
inti;
while(a--)for(i=0;i<110;i++);
}
main()
{
inti;
while(1)
{
P0=0xfe;
for(i=0;i<8;i++)
{
P0=_crol_(P0,1);
delay(500);
}
}
}
② +0或者-0的源码、反码、补码
[+0]原码=0000 0000, [-0]原码=1000 0000
[+0]反码=0000 0000, [-0]反码=1111 1111
[+0]补码=0000 0000, [-0]补码=0000 0000
补码没有正0与负0之分。正数的反码、补码和其源码相同,负数的反码是其源码,除符号位外其他位取反负数的补码是取其反码后加1。
详细释义:
所谓原码就是二进制定点表示法,即最高位为符号位,“0”表示正,“1”表示负,其余位表示数值的大小。
(一)反码表示法规定:
1、正数的反码与其原码相同;
2、负数的反码是对正数逐位取反,符号位保持为1;
(二)对于二进制原码10010求反码:
((10010)原)反=对正数(00010)原含符号位取反= 反码11101 (10010,1为符号码,故为负)
(11101) 二进制= -2 十进制
(三)对于八进制:
举例 某linux平台设置了默认的目录权限为755(rwxr-xr-x),八进制表示为0755,那么,umask是权限位755的反码,计算得到umask为0022的过程如下:
原码0755= 反码 0022 (逐位解释:0为符号位,0为7-7,2为7-5,2为7-5)
(四)补码表示法规定:正数的补码与其原码相同;负数的补码是在其反码的末位加1。
(2)8个0的源码扩展阅读
转换方法
由于正数的原码、补码、反码表示方法均相同,不需转换。在此,仅以负数情况分析。
(1) 已知原码,求补码。
例:已知某数X的原码为10110100B,试求X的补码和反码。
解:由[X]原=10110100B知,X为负数。求其反码时,符号位不变,数值部分按位求反;求其补码时,再在其反码的末位加1。
1 0 1 1 0 1 0 0 原码
1 1 0 0 1 0 1 1 反码,符号位不变,数值位取反
1 +1
1 1 0 0 1 1 00 补码
故:[X]补=11001100B,[X]反=11001011B。
(2) 已知补码,求原码。
分析:按照求负数补码的逆过程,数值部分应是最低位减1,然后取反。但是对二进制数来说,先减1后取反和先取反后加1得到的结果是一样的,故仍可采用取反加1 有方法。
例:已知某数X的补码11101110B,试求其原码。
解:由[X]补=11101110B知,X为负数。
采用逆推法
1 1 1 0 1 1 1 0 补码
1 1 1 0 1 1 0 1 反码(末位减1)
1 0 0 1 0 0 1 0 原码(符号位不变,数值位取反)
③ +0或者-0的源码、反码、补码分别是什么补码是一样的吗
0原码是00000000
-0原码是10000000
0反码是00000000
-0反码是11111111
0补码是00000000
补码没有正0与负0之分
正数的反码、补码和其原码相同负数的反码是其原码除符号位外其他位取反负数的补码是取其反码后加1
④ 什么的编码有两个零
0有+0和-0之分
+0的原码(8位):0000_0000
反码、补码同。
-0的原码(8位):1000_0000
反码 :1111_1111
补码 : 0000_0000
相比较起来,原码和反码都有2个表示0的编码。补码都是一样的。
总之,正数的原码、反码、补码一样;
负数的原码就是{符号位1,绝对值原码},反码等于符号位除外的各位取反,补码等于反码加1。
无符号数:最高位不用来表示正负,它没有负数
所以答案是AB
⑤ 补码10000000原码是多少
无法用原码表示,按照原码定义,8位原码所表示真值的范围为:-127(11111111B)~+127(01111111B)。补码10000000B的真值为-128,超出了8位原码的表示范围,所以无法用8位原码表示。
数0的补码表示是唯一的。
[+0]补=[+0]反=[+0]原=00000000;
[-0]补=11111111+1=00000000。
(5)8个0的源码扩展阅读:
已知一个数的补码,求原码的操作其实就是对该补码再求补码:
1、如果补码的符号位为“0”,表示是一个正数,其原码就是补码。
2、如果补码的符号位为“1”,表示是一个负数,那么求给定的这个补码的补码就是要求的原码。
例:已知一个补码为11111001,则原码是10000111。
因为符号位为“1”,表示是一个负数,所以该位不变,仍为“1”。
其余七位1111001取反后为0000110;再加1,所以是10000111。
网络-补码