编写把 unsigned int 型变量 a=1234 的十进制数转化为 BCD 数的程序,转化后的千位、 百位、十位、个位存放在自己定义的一个数组中。
时间: 2024-02-28 22:52:20 浏览: 13
好的,我可以为您提供一份 C++ 的代码示例:
```c++
#include <iostream>
using namespace std;
void dec2bcd(unsigned int a, int bcd[]) {
bcd[0] = a / 1000; // 千位
bcd[1] = (a / 100) % 10; // 百位
bcd[2] = (a / 10) % 10; // 十位
bcd[3] = a % 10; // 个位
}
int main() {
unsigned int a = 1234;
int bcd[4];
dec2bcd(a, bcd);
cout << bcd[0] << bcd[1] << bcd[2] << bcd[3] << endl;
return 0;
}
```
这个程序定义了一个名为 dec2bcd 的函数,它接收一个 unsigned int 型参数 a 和一个数组 bcd,将 a 的十进制数转换成 BCD 数后存放在 bcd 数组中。
在 main 函数中,我们将 a 赋值为 1234,定义一个长度为 4 的整型数组 bcd,然后调用 dec2bcd 函数将 a 转换成 BCD 数并存放在 bcd 数组中。最后输出 bcd 数组中的四个元素,即千位、百位、十位、个位的值。
相关问题
c语言将十进制数156拆为3个bcd码,并存入30h开始的三个单元
以下是实现代码:
```c
#include <stdio.h>
int main()
{
int num = 156;
int bcd1, bcd2, bcd3;
// 拆分BCD码
bcd1 = num / 100;
bcd2 = (num % 100) / 10;
bcd3 = num % 10;
// 转换为BCD码
bcd1 = (bcd1 / 10) << 4 | (bcd1 % 10);
bcd2 = (bcd2 / 10) << 4 | (bcd2 % 10);
bcd3 = (bcd3 / 10) << 4 | (bcd3 % 10);
// 存储到内存
unsigned char* p = (unsigned char*)0x30;
*p++ = bcd1;
*p++ = bcd2;
*p++ = bcd3;
return 0;
}
```
首先,将要拆分的十进制数156赋值给变量num。
然后,通过整除和取余操作,将num拆分成三个数字bcd1、bcd2和bcd3,分别代表百位、十位和个位的数字。
接下来,将每个数字转换成BCD码。这里采用的方法是:先将数字的十位和个位分别除以10,得到两个单独的数字,然后将它们分别左移4位,再将它们相加,得到BCD码。
最后,将三个BCD码存储到内存地址0x30开始的三个单元中。注意,在存储之前,需要先将指针p指向0x30,然后每存储一个BCD码,p需要递增1。
用汇编语言和C51语言实现将十进制数拆为三个BCD码,并存入30会开始的三个单元
汇编语言实现:
MOV A, #123 ;将十进制数123存入累加器A
DIV AB, #100 ;将A除以100,商存入B,余数存入A
MOV R0, A ;将余数存入R0
MOV A, B ;将商存入累加器A
DIV AB, #10 ;将A除以10,商存入B,余数存入A
MOV R1, A ;将余数存入R1
MOV R2, B ;将商存入R2
MOV DPTR, #0030H ;将数据存储地址指向0030H
MOV A, R0 ;将余数存入累加器A
ADD A, #30H ;将余数转换成ASCII码
MOVX @DPTR, A ;将ASCII码存入指针所指向的内存单元
INC DPTR ;指针地址加1
MOV A, R1 ;将余数存入累加器A
ADD A, #30H ;将余数转换成ASCII码
MOVX @DPTR, A ;将ASCII码存入指针所指向的内存单元
INC DPTR ;指针地址加1
MOV A, R2 ;将商存入累加器A
ADD A, #30H ;将商转换成ASCII码
MOVX @DPTR, A ;将ASCII码存入指针所指向的内存单元
C51语言实现:
unsigned int num = 123; //将十进制数123存入变量num
unsigned char bcd1, bcd2, bcd3; //定义三个存储BCD码的变量
bcd1 = num / 100; //将num除以100,商存入bcd1
num = num % 100; //将num对100取余,余数存入num
bcd2 = num / 10; //将num除以10,商存入bcd2
bcd3 = num % 10; //将num对10取余,余数存入bcd3
unsigned char *ptr = 0x0030; //将数据存储地址指向0030H
*ptr++ = bcd1 + 0x30; //将bcd1转换成ASCII码后存入指针所指向的内存单元
*ptr++ = bcd2 + 0x30; //将bcd2转换成ASCII码后存入指针所指向的内存单元
*ptr = bcd3 + 0x30; //将bcd3转换成ASCII码后存入指针所指向的内存单元