标题:
C语言二进制数里面0的位置问题
[打印本页]
作者:
Awaken
时间:
2020-5-2 22:07
标题:
C语言二进制数里面0的位置问题
输入一个16进制数如0xb7,其二进制数为10110111,我先确定这个二进制数里面0的位置的位数的差值,比如10110111中两个零的位置就差3位,然后用数码管显示出3,我自己编写了一个代码,怎么也执行不了,麻烦大神帮帮看看。
单片机C语言源程序如下:
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf};
sbit duan=P2^0;
void main(void)
{
uchar c;
uchar i;
uint s1;
uchar l;
uint b=0xb7;
uint s2;
uchar k[8];
while(1)
{
for(i=1;i<8;i++)
{
s1=b<<8; //左移8位
s1=s1>>1;//右移一位
s2=s1&0x80;
if(s2=0x00)
{
l=0;
k[l]=i;
l++;
}
}
c=k[0]-k[1];
duan=0;
P0=table[c];
}
}
作者:
hantu
时间:
2020-5-3 01:30
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf};
sbit duan=P2^0;
void main(void)
{
uchar b=0xb7,i,c,flag;
while(1)
{
flag=c=0;
for(i=0;i<8;i++)
{
if((b>>i)%2==0)
{
if(flag==0)flag=1;
else if(flag==1)break;
}
else if(flag==1)c++;
}
duan=0;
P0=table[c+1];
}
}
复制代码
作者:
星际尘埃
时间:
2020-5-3 09:21
s1=b<<8; 左移8位后低位补0,最后不都成0了吗!你后面还怎么判断
作者:
166864646883
时间:
2020-5-4 15:10
正如上面那位兄弟说的那样,s1==b<<8后,s1就变0了
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1