首页 > 编程知识 正文

单片机取反指令编程怎么写,keilc51如何转换汇编语言

时间:2023-05-05 11:09:12 阅读:39473 作者:4154

操作系统: windows 732位家庭版,XP

编译环境: C-FREE5.0

编译器:标准c89(32位)

代码1 :

#include#includeintmain(void ) )。

{

/*

无符号短整型;

无符号短j;

无符号短整型; */

短I;

short j;

短k;

i=0;

j=0xffff;

k=~j;

printf(I=%d,),I );

printf(%x(n ),I );

printf('j=%d,',j );

printf(%x(n ),j );

printf('k=%d,',k );

printf(%x(n ),k );

printf((I=%d,),),I );

printf(%x(n )、~i );

printf () (j=%d,),~j );

printf(%x(n )、~j );

if(I==~j ) {

printf(I==~j(n );

}

else{

printf(I!=~jn ';

}

if(I==k ) {

printf(I==k(n );

}

else{

printf(I!=kn ';

}

返回1;

}

执行结果:

#include#includeintmain(void ) )。

{

无符号短整型;

无符号短j;

无符号短整型;

/*

短I;

short j;

短k; */

i=0;

j=0xffff;

k=~j;

printf(I=%d,),I );

printf(%x(n ),I );

printf('j=%d,',j );

printf(%x(n ),j );

printf('k=%d,',k );

printf(%x(n ),k );

printf((I=%d,),),I );

printf(%x(n )、~i );

printf () (j=%d,),~j );

printf(%x(n )、~j );

if(I==~j ) {

printf(I==~j(n );

}

else{

printf(I!=~jn ';

}

if(I==k ) {

printf(I==k(n );

}

else{

printf(I!=kn ';

}

返回1;

}

执行结果如下。

如果知道数据以内存中存储的形式和位为单位取反的意思,理解上面的两个代码就没问题了。 这确实是c中最基本的概念,但最近写代码时想不起来,直接使用形式“if(I==~j )”,显然很危险。 特别是,如果将I和j定义为无符号数据类型,则很可能得不到所需的结果。 但奇怪的是,定义的无符号字符类型数据在keil C51编译器编译后,在8位51单片机上运行,正常; 用IAR编译器编译后,发生了异常。 推测是keilC51编译器做了某种特别的处理吧。 为了确保万无一失,希望在进行逆运算后,对其结果进行强制的模型变换。 例如,分配给一个变量后,进行比较和其他运算。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。