神清气爽 发表于 2026-1-22 18:18:21

Keill中 #define 定义long型问题

#define num 0x1ff00

...
typedef unsigned long mm;


if(mm>num)
{ ...}
else
{ ... }
用define 定义了num常量, 在if(mm>num) 比较中,用反汇编看num 的值 屏蔽了高位的 1 变成0xff00 这是什么原因.

后来用以下方法勉强解决
#define num 0x1ff00



...
typedef unsigned long mm;

typedef unsigned long k;

k=num;
if(mm>k)
{ ...}
else
{ ... }


以上是哪里出了问题,望高手指教

神清气爽 发表于 2026-1-22 18:23:35

以上发的帖写错了,在此更正
#define num 0x1ff00

...
typedef unsigned long mm;


if(mm>num)
{ ...}
else
{ ... }
用define 定义了num常量, 在if(mm>num) 比较中,用反汇编看num 的值 变成0xffff ff00(负数) 这是什么原因.

后来用以下方法勉强解决
#define num 0x1ff00



...
typedef unsigned long mm;

typedef unsigned long k;

k=num;
if(mm>k)反汇编看k是0x1ff00
{ ...}
else
{ ... }


以上是哪里出了问题,望高手指教

ercircle 发表于 2026-1-22 19:32:33

#define num 0x1ff00ul

wangxiangtan 发表于 2026-1-22 20:28:26

typedef好像是定义类型吧,
类型能跟常量比大小吗?没看懂

DebugLab 发表于 2026-1-22 22:12:36

不要用typedef

_奶咖君_ 发表于 2026-1-23 10:39:57

同样没看懂,,,你这个是定义了变量么?typedef unsigned long mm;我怎么感觉这个是指定了一个数据类型。。{:4_194:}

神清气爽 发表于 2026-1-23 14:59:20

_奶咖君_ 发表于 2026-1-23 10:39
同样没看懂,,,你这个是定义了变量么?typedef unsigned long mm;我怎么感觉这个是指定了一个数据类型 ...

是定义了一个变量 mm , 然后变量的值和常量比较

_奶咖君_ 发表于 2026-1-23 15:05:11

神清气爽 发表于 2026-1-23 14:59
是定义了一个变量 mm , 然后变量的值和常量比较

没看到你在那里定义的变量   0.0

神清气爽 发表于 2026-1-23 15:26:58

ercircle 发表于 2026-1-22 19:32
#define num 0x1ff00ul

你的方法能解决问题,谢谢

hsrzq 发表于 2026-1-23 15:27:56

神清气爽 发表于 2026-1-23 14:59
是定义了一个变量 mm , 然后变量的值和常量比较

但是,你这个写法我看了很多遍,mm不是变量,明明是个类型啊,是unsigned long类型的别名。
页: [1] 2
查看完整版本: Keill中 #define 定义long型问题