首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么我应该使用“UL”来指定unsigned long?

为什么我应该使用“UL”来指定unsigned long?
EN

Stack Overflow用户
提问于 2009-08-13 18:15:39
回答 6查看 40.3K关注 0票数 15
代码语言:javascript
运行
复制
ulong foo = 0;
ulong bar = 0UL;//this seems redundant and unnecessary. but I see it a lot.

我在引用数组的第一个元素时也看到了这一点

代码语言:javascript
运行
复制
blah = arr[0UL];//this seems silly since I don't expect the compiler to magically
                //turn '0' into a signed value

有人能提供一些见解,为什么我需要“UL”从头到尾明确指出这是一个无符号的长整型?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2009-08-13 18:26:37

代码语言:javascript
运行
复制
void f(unsigned int x)
{
//
}

void f(int x)
{
//
}
...
f(3); // f(int x)
f(3u); // f(unsigned int x)

它只是C++中的另一个工具;如果您不需要它,就不要使用它!

票数 29
EN

Stack Overflow用户

发布于 2009-08-13 18:34:36

在您提供的示例中,它是不需要的。但后缀通常用在表达式中,以防止精度损失。例如:

代码语言:javascript
运行
复制
unsigned long x = 5UL * ...

如果您没有使用UL后缀,您可能会得到不同的结果,例如,如果您的系统具有16位整数和32位长整型。

这里是另一个例子,灵感来自Richard Corden的评论:

代码语言:javascript
运行
复制
unsigned long x = 1UL << 17;

同样,如果您有16位或32位整数,如果您去掉后缀,您将得到不同的结果。

同样类型的问题也适用于32位与64位整数,以及在表达式中混合long和long long。

票数 17
EN

Stack Overflow用户

发布于 2009-08-13 18:26:46

我想有些编译器可能会发出警告。

作者这样做可能是为了确保代码没有警告?

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1273687

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档