打印

Keil的强制无符号数设置问题

[复制链接]
5043|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
linqing171|  楼主 | 2012-7-5 08:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
keil, ov, rc, nex, TI
记得以前,有地方可以设置char强制为无符号的,现在怎么找不到了?
我用的keil 9.0 限制版。

昨天,从厂家的代码里,复制了一点东西,结果BUG就出来了。
他们喜欢用char,而我一般用无符号的,因为项目就一点简单的控制算法,没要复杂的数**算,也不会出现负数。

if(0xFF!=*( char code *) ((xyz))     //无论 Enable ANSI interger promotion rules 是不是勾上,结果一样.
       CLR      A
       MOVC     A,@A+DPTR
       MOV      R7,A ;把值存入R7
       RLC      A ;以下三句汇编,计算A的符号,并存入R6,如果负数为FF
       SUBB     A,ACC
       MOV      R6,A
       MOV      A,R7 ;把值再取出来
       CPL      A
       ORL      A,R6 ;符号位也要是0
       JZ       Next

if(((char)0xFF)!=*( char code *) ((xyz))     
       CLR      A
       MOVC     A,@A+DPTR
       CPL      A
       JZ       Next

if((0xFF)!=*(unsigned char code *) ((xyz))     
       CLR      A
       MOVC     A,@A+DPTR
       CPL      A
       JZ       Next

上面三个写法,明显的后面两个满足我的想法,而第一个,实在无语的很了。
后面两个和FF比,都是把这个结果取反后和0比,比减法或者异火能省点代码。

再次问一下,怎么样才能即使符合搞错了,编译出来也是对的?

相关帖子

沙发
ayb_ice| | 2012-7-5 09:23 | 只看该作者
C51不能设置,MDK可以

使用特权

评论回复
板凳
呆板书生| | 2012-7-5 09:24 | 只看该作者
unsigned

使用特权

评论回复
地板
airwill| | 2012-7-5 09:30 | 只看该作者
我记得编译选项里有强制将 char 作为 unsigned 类型处理
不过我没有用过, 楼主不妨试试看.

使用特权

评论回复
5
原野之狼| | 2012-7-5 09:30 | 只看该作者
查找 替换 就可以了
但是LZ得弄清楚 到底该用有符号还是无符号 以免带来BUG

使用特权

评论回复
6
uc_c++| | 2012-7-5 09:32 | 只看该作者
char只用来表示ASCII,其他情况用unsigned char,signed char。

使用特权

评论回复
7
ayb_ice| | 2012-7-5 09:51 | 只看该作者
写程序一般都用typedef重定义数据类型,方便移植

使用特权

评论回复
8
linqing171|  楼主 | 2012-7-6 12:28 | 只看该作者
结贴给分。
为了把一个有符号的和无符号的进行比较,竟然扩为了双字节又比较,应该有更简单的汇编代码才对。

使用特权

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

本版积分规则

53

主题

2875

帖子

15

粉丝