打印

深受盗版KEIL编译器之苦! 大家有没有同感? 此问题找到原因

[复制链接]
楼主: Ryanhsiung
手机看帖
扫描二维码
随时随地手机跟帖
81
70# 李富贵
这个瞎扯了吗?
#include<stdio.h>
#define uchar unsigned char
#define uint unsigned int
void main()
{
uint a=0x55,b=0xaa;
uchar c,d,n=7;

for(;n>0;n--)

{

c+=((a>>n)&1);

d+=!((b>>n)&1);

}

if(c==d)

printf("是相反数!\n");

else

printf("不是相反数!\n");

}

使用特权

评论回复
82
fe07fe| | 2012-1-13 23:06 | 只看该作者
#include<stdio.h>
#define uchar unsigned char
#define uint unsigned int
void main()
{
    uint a=0xa1,b=0x5e;

if((a^b)==255)

printf("是相反数!\n");

else

printf("不是相反数!\n");
}


这个更简单,
测试值:
10100001  0xa1
01011110  0x5e

使用特权

评论回复
83
fe07fe| | 2012-1-14 00:05 | 只看该作者
70# 李富贵
这个瞎扯了吗?
#include
#define uchar unsigned char
#define uint unsigned int
void main()
{
uint a=0x55,b=0xaa;
uchar c,d,n=7;

for(;n>0;n--)

{

c+=((a>>n)&1);

d+=!((b>>n)&1);

}

if(c= ...
fe07fe 发表于 2012-1-13 21:37

蛋疼错了。
这个,
#include<stdio.h>
#define uchar unsigned char
#define uint unsigned int
void main()
{
uint a=0xa0,b=0x5e;
uchar c=0,d=0,n=8,m=0;
        for(;n>0;--n)
        {
        c=((a>>(n-1))&1);
    printf("%d\t",c);
        d=((b>>(n-1))&1);
    printf("%d\n",d);
        if(c==d)
        m=1;
       
        }
                if(m==0)
                printf("是相反数!  \n");
                else
                printf("不是相反数!\n");
}

使用特权

评论回复
84
不光写程序| | 2012-1-14 11:01 | 只看该作者
我非常确定的认为这就是编译器的一个严重的BUG,绝对应该向kile公司建议修改掉这个BUG!

使用特权

评论回复
85
不光写程序| | 2012-1-14 11:57 | 只看该作者

使用特权

评论回复
86
牛牛特工| | 2012-1-14 12:06 | 只看该作者
嗯如果真的是楼主所说原因 只能说编译器多少还是会犯傻的
总会有点缺陷

使用特权

评论回复
87
李富贵| | 2012-1-14 21:14 | 只看该作者
我非常确定的认为这就是编译器的一个严重的BUG,绝对应该向kile公司建议修改掉这个BUG!
不光写程序 发表于 2012-1-14 11:01

不是,应该是楼主不知道整数扩展导致的,因为IAR的结果和Keil一样,我一直认为IAR是最好的嵌入式编译器,没有之一。

使用特权

评论回复
88
Ryanhsiung|  楼主 | 2012-1-14 22:55 | 只看该作者
#include

#include
#include  
#define uchar unsigned char
#define uint unsigned int  
const unsigned char Slave_RecBuff[]={0,1,0};
int main()
{
PINSEL0=0X00000000;

IO0DIR=1
fe07fe 发表于 2012-1-12 09:53


~Slave_RecBuff[2] ,对r1操作数32为全部取反了(0xffffffaa),在与r0比较(0xaa) 所以不相等.

你的表达式:
if(Slave_RecBuff[1] == (!Slave_RecBuff[2]))    //进入了
Slave_RecBuff[1]  =1;  Slave_RecBuff[2]高24全位0, 低8位!运算后变位变成1,Slave_RecBuff[2]中的数就是0x00000001;1 ==1所以两个相等了!

使用特权

评论回复
89
fe07fe| | 2012-1-15 23:18 | 只看该作者
82# Ryanhsiung
const unsigned char Slave_RecBuff[]={0,1,0};数组只是0和1.

使用特权

评论回复
90
fe07fe| | 2012-1-15 23:55 | 只看该作者
87# 李富贵
大爷说什么还要你管啊!你是我的儿啊!

使用特权

评论回复
91
Ryanhsiung|  楼主 | 2012-1-16 12:38 | 只看该作者
要文明讨论,不要进行人身攻击!

使用特权

评论回复
92
jckimi| | 2012-1-16 15:44 | 只看该作者
就是用不管keil的没有自动格式化的功能

使用特权

评论回复
93
jiangzhe8525| | 2012-3-21 15:49 | 只看该作者
IAR偶尔也会开玩笑的。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则