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

[复制链接]
16029|92
fe07fe 发表于 2012-1-13 21:37 | 显示全部楼层
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");

}

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
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
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");
}
不光写程序 发表于 2012-1-14 11:01 | 显示全部楼层
我非常确定的认为这就是编译器的一个严重的BUG,绝对应该向kile公司建议修改掉这个BUG!
不光写程序 发表于 2012-1-14 11:57 | 显示全部楼层

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
牛牛特工 发表于 2012-1-14 12:06 | 显示全部楼层
嗯如果真的是楼主所说原因 只能说编译器多少还是会犯傻的
总会有点缺陷
李富贵 发表于 2012-1-14 21:14 | 显示全部楼层
我非常确定的认为这就是编译器的一个严重的BUG,绝对应该向kile公司建议修改掉这个BUG!
不光写程序 发表于 2012-1-14 11:01

不是,应该是楼主不知道整数扩展导致的,因为IAR的结果和Keil一样,我一直认为IAR是最好的嵌入式编译器,没有之一。
 楼主| 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所以两个相等了!
fe07fe 发表于 2012-1-15 23:18 | 显示全部楼层
82# Ryanhsiung
const unsigned char Slave_RecBuff[]={0,1,0};数组只是0和1.
fe07fe 发表于 2012-1-15 23:55 | 显示全部楼层
87# 李富贵
大爷说什么还要你管啊!你是我的儿啊!
 楼主| Ryanhsiung 发表于 2012-1-16 12:38 | 显示全部楼层
要文明讨论,不要进行人身攻击!
jckimi 发表于 2012-1-16 15:44 | 显示全部楼层
就是用不管keil的没有自动格式化的功能
jiangzhe8525 发表于 2012-3-21 15:49 | 显示全部楼层
IAR偶尔也会开玩笑的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 在线客服 返回列表 返回顶部