打印

C语言 数字后加ul

[复制链接]
15418|15
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
电子乌托邦|  楼主 | 2010-9-19 18:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
HWM| | 2010-9-19 19:51 | 只看该作者
整常数缺省类型应该是integer。如果本意就是integer类型的话,自然不用加ul。

使用特权

评论回复
板凳
ntao0227| | 2010-9-19 19:59 | 只看该作者
缺省是unsigned int,C语言在运行过程中会隐式的类型转换,有时会使程序出现异响不到的结果。
可以试试 if(-1<ZERO){...}看看结果。

使用特权

评论回复
地板
HWM| | 2010-9-19 20:04 | 只看该作者
to 3L:

整常数类型应该是integer,其可正负。

使用特权

评论回复
5
电子乌托邦|  楼主 | 2010-9-20 08:39 | 只看该作者
谢谢楼上几位回复
什么都不加,默认的确是int型
我想知道,在什么情况下必须要加后缀。

使用特权

评论回复
6
ayb_ice| | 2010-9-20 08:41 | 只看该作者
5# 电子乌托邦
在想要强制转换成L或UL时加或可能产生溢出的时候加

使用特权

评论回复
7
电子乌托邦|  楼主 | 2010-9-20 10:26 | 只看该作者
8位单片机下
unsigned long a,b;
a = 10 * 10000;
b = 10ul * 10000;

结果a = 0xffff86a0
b = 0x000186a0
b的结果是我想要的,可是为什么a得到的是错误的结果。
我不知道原因。
瞎猜一下:大多数情况下,我只认为变量有数据类型,因为变量在内存里有空间分配。
今天看了书,整型数据好像也有数据类型,但是整型数据在内存有空间分配吗?
那位大侠能从内存分配角度来讲解一下。

使用特权

评论回复
8
HWM| | 2010-9-20 10:46 | 只看该作者
本帖最后由 HWM 于 2010-9-20 10:51 编辑

re 7L:

前面说了,常整数的缺省类型是 int 。10 * 10000已经超出int(十六位)的合法表达范围,溢出变成的“负数”。然后赋值给ul类型的a,其过程必须进行符号扩展(十六位的符号位填充前面扩充的高十六位),故变成 0xffff86a0。

如果其中一个常数强制定义成ul(如10ul),则其整个表达式运算中的中间结果都按类型ul处理。这样就不会有溢出,则其结果就是0x000186a0。

要注意的是,表达式运算同样需要中间变量(类似一般变量一样,只是不可见而已)。有变量就该有类型附属,而此类型就是根据表达式中的变量和常数的类型来调整的。

使用特权

评论回复
9
电子乌托邦|  楼主 | 2010-9-20 12:00 | 只看该作者
谢谢HWM
似乎明白了,又做了另一个实验。
8位单片机下
unsigned long a,b;
a = 10 * 100000;    // 不同之处多了个0
b = 10ul * 100000; // 不同之处多了个0

结果a = 0x000f4240
b = 0x000f4240
结果却一样
是不是因为100000已经超出16位整形,所以就都按32位来处理了?
不知道我的理解对不对。

使用特权

评论回复
10
HWM| | 2010-9-20 12:30 | 只看该作者
to 9L:

是的。

使用特权

评论回复
11
电子乌托邦|  楼主 | 2010-9-20 13:14 | 只看该作者
谢谢诸位
谢谢HWM
结贴

使用特权

评论回复
12
31306528| | 2010-9-20 15:31 | 只看该作者
学习学习!~~~~

使用特权

评论回复
13
dogandog| | 2011-3-30 09:46 | 只看该作者
我也来看看鲜

使用特权

评论回复
14
heiselpy| | 2013-4-8 17:24 | 只看该作者
标记mark

使用特权

评论回复
15
专注于嵌入式| | 2013-4-8 21:34 | 只看该作者
加强可移植性,尤其是不同字长的机器上 比如#define SECONDS_PER_YEAR (365*24*60*60)UL

使用特权

评论回复
16
gental| | 2014-11-24 14:05 | 只看该作者
专注于嵌入式 发表于 2013-4-8 21:34
加强可移植性,尤其是不同字长的机器上 比如#define SECONDS_PER_YEAR (365*24*60*60)UL ...

里面不能加括号吧,编译器会报错的

使用特权

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

本版积分规则

140

主题

633

帖子

2

粉丝