#include <stdio.h>
#include <stdlib.h>
#define NUM_ZERO (0)
#define NUM_ONE (1)
#define NUM_TWO (2)
#define NUM_THREE (3)
#define NUM_FOUR (4)
#define NUM_TEN (10)
#define NUM_EIGHT (8)
#define NUM_THIRTYTWO (32)
typedef signed int SINT32;
typedef unsigned short UINT16;
typedef unsigned char UINT8;
void THREE_Countbit()
{
SINT32 s32Integer = NUM_ZERO;
SINT32 s32Count = NUM_ZERO;
printf("please input a integer: ");
scanf("%d", &s32Integer);
while(s32Integer)
{
if(NUM_ONE == s32Integer % NUM_TWO)
{
s32Count++;
}
else
{
; /* do nothing */
}
s32Integer /= NUM_TWO;
}
printf("the count of bit 1 is : %d\n", s32Count);
}
void THREE_BCDtobinary()
{
UINT8 u8Index = NUM_ZERO;
UINT8 u8Length = NUM_ZERO;
UINT16 u16Count = NUM_ZERO;
SINT32 s32Sum = NUM_ZERO;
UINT8 u8Array[NUM_THIRTYTWO] = {NUM_ZERO};
fflush(stdin);
printf("please input 8421BCD :");
gets(u8Array);
u8Length = strlen(u8Array);
u8Index = u8Length % NUM_FOUR;
if(NUM_ONE == u8Index)
{
u16Count = (u8Array[NUM_ZERO]-'0') * NUM_ONE;
s32Sum = s32Sum * NUM_TEN +u16Count;
}
else if(NUM_TWO == u8Index)
{
u16Count = (u8Array[NUM_ZERO]-'0')*NUM_TWO + (u8Array[NUM_ONE]-'0')*NUM_ONE;
s32Sum = s32Sum * NUM_TEN +u16Count;
}
else if(NUM_THREE == u8Index)
{
u16Count = (u8Array[NUM_ZERO]-'0')*NUM_FOUR + (u8Array[NUM_ONE]-'0')*NUM_TWO + (u8Array[NUM_TWO]-'0')*NUM_ONE;
s32Sum = s32Sum * NUM_TEN +u16Count;
}
else
{
; /* do nothing */
}
for(u8Index; u8Index < u8Length; )
{
u16Count = (u8Array[u8Index + NUM_ZERO]-'0')*NUM_EIGHT + (u8Array[u8Index + NUM_ONE]-'0')*NUM_FOUR + (u8Array[u8Index + NUM_TWO]-'0')*NUM_TWO + (u8Array[u8Index + NUM_THREE]-'0')*NUM_ONE;
if(NUM_TEN <= u16Count)
{
printf("input error!");
exit(NUM_ONE);
}
s32Sum = s32Sum * NUM_TEN +u16Count;
u8Index += NUM_FOUR;
}
printf("the integer is: %d\n", s32Sum);
}
void THREE_BinarytoBCD()
{
SINT32 s32Integer = NUM_ZERO;
SINT32 s32Temp = NUM_ZERO;
UINT8 u8Index = NUM_ZERO;
UINT8 u8Four = NUM_ZERO;
UINT16 u16Count = NUM_ZERO;
UINT8 u8Array[NUM_THIRTYTWO] = {NUM_ZERO};
printf("please input a integer: ");
scanf("%d", &s32Integer);
s32Temp = s32Integer;
while(s32Temp)
{
s32Temp /= 10;
u16Count++;
}
u8Index = u16Count*NUM_FOUR - NUM_ONE;
while(s32Integer)
{
s32Temp = s32Integer % NUM_TEN;
for(u8Four = NUM_ZERO; u8Four < NUM_FOUR; u8Four++)
{
u8Array[u8Index] = s32Temp % NUM_TWO + '0';
s32Temp = s32Temp / NUM_TWO;
u8Index--;
}
s32Integer /= NUM_TEN;
}
puts(u8Array);
}
void main()
{
THREE_Countbit();
THREE_BCDtobinary();
THREE_BinarytoBCD();
}
作业-8421BCD码的转换
最新推荐文章于 2024-01-28 19:18:25 发布