加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 为什么常量的类型修饰符?

发布时间:2020-12-16 10:13:56 所属栏目:百科 来源:网络整理
导读:我无法理解文字常量的类型修饰符的用途是什么,比如数值常量: 75 75u 75l 75ul75lu 在什么情况下这可能有用?我的意思是如果你已经为变量类型声明了一个类型修饰符,我认为没有必要这样做.如果有人能帮助我理解这一点,那就太棒了!谢谢! 奖金问题:“文字”
我无法理解文字常量的类型修饰符的用途是什么,比如数值常量:

75 
75u     
75l  
75ul
75lu

在什么情况下这可能有用?我的意思是如果你已经为变量类型声明了一个类型修饰符,我认为没有必要这样做.如果有人能帮助我理解这一点,那就太棒了!谢谢!

奖金问题:“文字”是否与“常数”相同,你可以只说“文字”而不是“文字常量”吗?

解决方法

对于整数文字,除了Bathsheba的答案之外,它还用于各种情况,如抑制警告

unsigned int n = somevalue;
...
if (n > 5) dosomething();

改为if(n> 5U)并且不再有警告.

或者当你做这样的事情

long long x = 1 << 50;

并意识到x不是你所期望的,你需要改变它

long long x = 1LL << 50;

另一种用法是C 11中的auto关键字

auto a = 1;
auto b = 1U;
auto c = 1L;
auto d = 1UL;

以上将导致变量的不同类型

对于浮点文字,使用后缀将导致更正确的结果

long double a = 0.01234567890123456789;
long double a = 0.01234567890123456789L;

那些may result in very very different values.那是因为没有后缀的文字是双字面值并且将被正确舍入到双倍,因此当long double具有比double更高的精度时,它将导致精度损失.由于double-rounding浮点数会发生同样的情况(首先是双倍然后浮动,而不是直接围绕文字浮动)

if (0.67 == 0.67f)
   std::cout << "Equal";
else 
   std::cout << "Not Equal";

The above will print out “Not Equal”

What is the difference between casting to float and adding f as a suffix when initializing a float?

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读