发新帖本帖赏金 1.00元(功能说明)我要提问
返回列表
打印
[应用相关]

c语言,数字后面加个u有什么好处? 不加行不行?

[复制链接]
21590|13
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
bear1|  楼主 | 2015-7-12 16:42 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#define  DEF_CLR                                           0u
#define  DEF_SET                                           1u

#define  DEF_FAIL                                          0u
#define  DEF_OK                                            1u


#define  DEF_BIT_00                                     0x01u
#define  DEF_BIT_01                                     0x02u
#define  DEF_BIT_02                                     0x04u
#define  DEF_BIT_03                                     0x08u
#define  DEF_BIT_04                                     0x10u
#define  DEF_BIT_05                                     0x20u
#define  DEF_BIT_06                                     0x40u
#define  DEF_BIT_07                                     0x80u

#define  DEF_BIT_56                       0x0100000000000000u
#define  DEF_BIT_57                       0x0200000000000000u
#define  DEF_BIT_58                       0x0400000000000000u
#define  DEF_BIT_59                       0x0800000000000000u
#define  DEF_BIT_60                       0x1000000000000000u
#define  DEF_BIT_61                       0x2000000000000000u
#define  DEF_BIT_62                       0x4000000000000000u
#define  DEF_BIT_63                       0x8000000000000000u


谢谢!
沙发
596142041| | 2015-7-12 18:10 | 只看该作者
其实没啥影响的。。。。

使用特权

评论回复
板凳
xyz549040622| | 2015-7-12 18:36 | 只看该作者
表明这些数字在MCU存储中所占的字节数,你不指定数据类型,MCU将会按照默认字节存储的。

使用特权

评论回复
地板
zhaoyu2005| | 2015-7-12 18:38 | 只看该作者
596142041 发表于 2015-7-12 18:10
其实没啥影响的。。。。

等你遇到数据计算结果非想要(第一反应是计算结果错了,实际上不是错了)的时候就知道有没影响了。

使用特权

评论回复
5
戈卫东| | 2015-7-12 19:06 | 只看该作者
当数据类型向不同类型并且宽度也不同的方式转换时,可能有符号扩展行为,也可能没有。而符号扩展可能是你想要的也可能是你不想要的,这时候你对类型的选择需要注意。
不过,这些常数你指定类型是没有用的。。。。。。。

使用特权

评论回复
6
戈卫东| | 2015-7-12 19:10 | 只看该作者
或者说,现在常用的工具并不需要你这样在常数上附加类型

使用特权

评论回复
7
李富贵| | 2015-7-12 20:42 | 只看该作者
xyz549040622 发表于 2015-7-12 18:36
表明这些数字在MCU存储中所占的字节数,你不指定数据类型,MCU将会按照默认字节存储的。 ...

错,C语言里面0x8000000000000000u这样的常数一律默认为int型,不是什么字节。至于int型是4字节还是2字节那就是编译器的问题了。你加u尾缀并不会扩展常数占用的字节数,加ul才会从int型长度扩展成long型长度。

使用特权

评论回复

打赏榜单

xyz549040622 打赏了 1.00 元 2015-07-13

评分
参与人数 1威望 +10 收起 理由
xyz549040622 + 10
8
lbc___| | 2015-7-12 21:05 | 只看该作者
表示无符号数

使用特权

评论回复
9
309030106| | 2015-7-12 21:51 | 只看该作者
加u尾缀并不会扩展常数占用的字节数,加ul才会从int型长度扩展成long型长度

使用特权

评论回复
10
xyz549040622| | 2015-7-13 07:28 | 只看该作者
李富贵 发表于 2015-7-12 20:42
错,C语言里面0x8000000000000000u这样的常数一律默认为int型,不是什么字节。至于int型是4字节还是2字节 ...

谢谢老朴指点,纠正了我的一个误区。

使用特权

评论回复
11
icecut| | 2015-7-13 08:17 | 只看该作者
直到8楼才是重点

使用特权

评论回复
12
bear1|  楼主 | 2015-7-13 09:00 | 只看该作者
IAR编译器环境下,有没有必要加这个u?

使用特权

评论回复
13
cool_coder| | 2015-7-13 13:01 | 只看该作者
bear1 发表于 2015-7-13 09:00
IAR编译器环境下,有没有必要加这个u?

只有在容易发生混淆的时候才是必要的,比如:0xffff 要赋给一个16位整型变量,如果是无符号整型,其值是十进制的65535;如果是有符号整型,却是-1。这时候明确指出来比较好。

使用特权

评论回复
14
ctsdswk| | 2015-7-13 16:51 | 只看该作者
后缀就是告诉编译器该常数的属性。
默认为有符号INT型,加了u就是无符号的,加了l就是long型。
做下移位就知道结果了。以0x80为例,左移次数过多编译器会提示你符号位被改变,即负数被移位成正数。加个u的话就被编译器识别为无符号数,可以随意移位。不会影响符号位。
个人理解,请自行查证真伪。

使用特权

评论回复
发新帖 本帖赏金 1.00元(功能说明)我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

150

主题

955

帖子

1

粉丝