//*********************************************
成都创新互联专注于企业全网营销推广、网站重做改版、甘谷网站定制设计、自适应品牌网站建设、成都h5网站建设、商城网站制作、集团公司官网建设、外贸网站制作、高端网站制作、响应式网页设计等建站业务,价格优惠性价比高,为甘谷等各大城市提供网站开发制作服务。
//不使用求余和除法的二进制转bcd的算法
//使用了C51中 指令DA的思路
//本人原创 已测试 以应用实际项目中
//Lhex_to_bcd
//*********************************************
//**************************
// 数据自加 并作10进制检查
//
//**************************
void C51_DA(unsigned char *da1,unsigned char Ln,unsigned char ac0)
{
unsigned char i;
unsigned char ac = ac0;//进位标志
for(i=0;iLn;i++)
{
da1[i] = da1[i] + da1[i] + ac;
if(da1[i] 9)
{
da1[i] = da1[i] - 10;
ac = 1;
}
else
{
ac= 0;
}
}
}
//**************************************
// 多字节整形转 bcd
// 结果保存为非压缩bcd码
// 输入数据
// da1 用来保存转换结果
// 长度大于 (l+1)*2
// da2 被转换数据
// l da2 长度 用字节个数表示
// 输出 无
//**************************************
void Lhex_to_bcd(unsigned char *da1,unsigned char *da2,unsigned char l)
{
unsigned char i;
unsigned char m;
unsigned char tmp;
unsigned char Ln = (l+1)*2; //计算结果的长度
for(i=0;iLn;i++) //初始化计算结果
da1[i] = 0;
for(m=0;ml;m++) //循环输入数据的字节数
{
tmp = da2[l-1-m];
for(i=0;i8;i++)//每个字节循环8次
{
if(tmp0x80) //取最高 1 bit
C51_DA(da1,Ln,1);
else
C51_DA(da1,Ln,0);
tmp=1;
}
}
}
经常看到C语言的main函数定义为:
int main(int argc, char *argv[]),但是在函数体中经常是根本不用main函数中的这两个参数,这两个参数用于在运行程序时,从外部给程序传递参数,其中argc中保存了参数的个数,argv中分别保存了各个参数.
例如一个程序的main()函数头部形如int main(int argc, char *argv[]),编译链接后生成的可执行文件名为a.exe,那么请注意下面的调用:
a.exe abc def
在上面的命令行中,a.exe是要运行的程序名称,后面的abc和def就是传入程序的两个参数,这两个参数就通过argc和argv传入程序,注意这些参数都是字符串。
通过上面的调用,在这个程序中,argc=3,a.exe是第一个参数,这个字符串将保存在argv[0]中,abc和def分别是第二和第三个参数,它们分别被保存在argv[1]和argv[2]中
C51带进位的循环左右移指令是什么:这必须用汇编语言:RLC A、 RRC A。
_crol_()、_cror_(),都不是指令,它们是C语言的函数。
原发布者:血战长空wlg
题目:数制转换问题1.需求分析将十进制数N转换成八进制数是计算机实现计算的基本问题,解决方案很多,其中最简单的方法是除8取余法。1)本方案采用顺序栈的方式模拟整个过程。其原理如下:例子:(1348)10=(2504)8NNdiv8Nmod8134816841682102125202从中可以看出,最先产生的余数4是转换加过的最低位,这正好符合栈的“后进先出”的特性。2)功能:从键盘输入任意一个非负十进制整数,输出与其等值的八进制数;若输入一个负数,则显示输入错误,请重新输入。3)测试数据:(1348)10=(2504)8,(0)10=(0)8,(-1234)10输入数据错误。2.概要设计定义顺序栈类型,由键盘输入非负十进制整数N,执行以下循环操作:N%8入栈,N=N/8,直至N=0。主要函数由建立空栈Initsqstack()、入栈Push()、出栈Pop()和main()函数组成。过程中函数调用关系图如下:3.详细设计1)数据类型定义structSqstack{int*bottom;int*top;intmaxsize;};2)系统主要子程序详细设计A.建立空栈intInitsqstack(Sqstacks){s.bottom=(int*)malloc(sizeof(int)*20);if(s.bottom){s.top=s.bottom;
我有点没搞明白(45、81、673938)取最后一位是怎么得出5138的,不是518吗?
但还是随便写一下吧
#include stdio.h
#include stdlib.h
int getLastBit(int number);
int main()
{
int i = 0, n = 0;
int number = 0, newnumber = 0;
printf("输入整数个数:");
scanf("%d", n);
for(i = 1; i = n; i++)
{
scanf("%d", number);
newnumber *= 10;
newnumber += getLastBit(number);
}
printf("新整数是:%d\n", newnumber);
return 0;
}
int getLastBit(int number)
{
if(number = 0)
{
printf("错误!\n");
exit(1);
}
else
return number%10;
}
任意进制之间的进制转换。需要考虑高精度整形的设计,用数组模拟一个整形变量。一位一位的进行进制转换,算法思想和十进制转换到二进制相同,除以目标进制,余数为低位。这种进制转换实用性不强,一般出现在计算机程序竞赛当中。
8,10,16进制的转换。在C语言中有不少函数都能实现上面几种进制之间的进制转换。
推荐其中的sprintf/sscanf函数。
sprintf格式的规格如下所示。[]中的部分是可选的。
%[指定参数][标识符][宽度][.精度]指示符
若想输出'%'本身时, 请使用'%%'处理。
1. 处理字符方向。负号时表示从后向前处理。
2. 填空字元。 0 的话表示空格填 0;空格是内定值,表示空格就放着。
3. 字符总宽度。为最小宽度。
4. 精确度。指在小数点后的浮点数位数。
转换字符
%% 印出百分比符号,不转换。
%c 整数转成对应的 ASCII 字元。
%d 整数转成十进位。
%f 倍精确度数字转成浮点数。
%o 整数转成八进位。
%s 整数转成字符串。
%x 整数转成小写十六进位。
%X 整数转成大写十六进位。
例程(16进制和10进制之间的转换):
#include stdio.h
#include limits.h
int main()
{
char s[100] = {0};
sprintf(s, "%x", INT_MAX);
printf("%s\n", s); // 7fffffff
char str[100] = "7fffffff";
int i = 0;
sscanf(str, "%x", i);
printf("%d\n", i); // 2147483647
return 0;
}