51单片机C语言问题

来源:百度知道 编辑:UC知道 时间:2024/06/27 05:10:58
用C写个51单片机程序,
请问C语言中如何取出四位数中任一位?如将一个int a 中的第三位、第二位送入b中

如果用除,那么如果最高位是0。那么0/1结果是0吗还是会编译出错?
Player1005:
我的目的就是 4位数是1234,分别取1,2,3,4出来,请问这个简单方法??

我是要把四位数的1、2、3、4分别作段码送数码管扫描显示的

问题还真不少,就10分,强烈要求追加

b = a & 4 第三位
b = a & 2 第二位

0/1 = 0 。 keil不会报错。

2637/10 = 263 2637%10 = 7

637/1000 = 0 637%1000 = 637

补充
b = a & 2 第二位
可以吗? a 是四位的十进制数,比如 2637& 2=3 ? 加分!

没问题,计算机没有优化,是按2进制存储的。
要不 char怎么能表示 255而非100
word 表示 65535
只是你的表述
b = a&2 得到的是2歌者0 也就相当于逻辑 1 和 0

这个就没有什么技巧了
a = x%10
b = (x%100)/10
c = (x%1000)/100
d = x/1000

这个问题不必担心 0不能作为除数,但可以作为被除数
0/1可以但1/0不可以

2637/10=263 2637%10=7(只要余数)
637/1000=0 673%1000=637

问题不是很清楚。
2637&2=0;
&是按位与 操作过程是101001001101 & 0000000010 =000000000000;
你的取4位数的任一位有很多理解方式:
1).比如:4位数是1234,分别取1,2,3,4出来,这个很简单
2). 比如:4位数是1234,二进制为10011010010,取后面的0010四位。(单片机经常需要这样).这个就是分别&0x08,&0x04,&0x02,&0x01即可。

int i=0;
int a=1234;
int result[5];
while (a!=0)
{
result[i]=a%10;
a=a/10;
i++;
}

用取整和求余