c++ 字面值整数常量加后缀 有什么用? 举个列子
答案:6 悬赏:30 手机版
解决时间 2021-02-04 09:59
- 提问者网友:心牵心
- 2021-02-03 20:10
书上只是说加个什么后缀就是unsigned | long | unsigned long |float | double类型.但是具体有什么用,书上也没有具体的例子,我真不知道有什么用,我觉着少后缀不是一样用吗?
最佳答案
- 五星知识达人网友:渊鱼
- 2021-02-03 21:23
常量(constant)可以理解为所谓的字面值,常量和用const修饰的变量并不是一个概念。
比如有语句如下:
view plaincopy
int a = 1234;
那么语句中的int就是数据类型,a是变量,1234是字面值。int的字面值也就是可以用来初始化int类型变量的东西(不要说用其他变量也可以初始化哦!)。
同样,char的字面值当然是机器的ASCII字符集了,分为可见的和不可见的字符,表示方法有两种,见下面程序:
#include <stdio.h>
int main(void)
{
// 十进制表示
int in = 1234;
long ln = 1234L;
unsigned int uin = 1234u;
unsigned long uln = 1234UL;
// 十六进制表示
in = 0xabul;
// 八进制表示
in = 0123ul;
// 没有后缀表示某整形常量为short
// 普通表示
char c = 'x';
// 用转义序列表示
c = '\n';
c = '\100'; // 1-3位八进制数
c = '\x4a'; // 1-2位十六进制数
float f = -12.34e-1f; // float
double df = 1234.56; // double
long double ldf = 1234.56L; // long double
enum Month_t
{
JAN = 1, FEB, MAR, APR, MAY, JUN,
JUL, AUG, SEP, OCT, NOV, DEC
};
enum Month_t m = MAR; // c编译器不检查,c++编译器会检查
return 0;
}
比如有语句如下:
view plaincopy
int a = 1234;
那么语句中的int就是数据类型,a是变量,1234是字面值。int的字面值也就是可以用来初始化int类型变量的东西(不要说用其他变量也可以初始化哦!)。
同样,char的字面值当然是机器的ASCII字符集了,分为可见的和不可见的字符,表示方法有两种,见下面程序:
#include <stdio.h>
int main(void)
{
// 十进制表示
int in = 1234;
long ln = 1234L;
unsigned int uin = 1234u;
unsigned long uln = 1234UL;
// 十六进制表示
in = 0xabul;
// 八进制表示
in = 0123ul;
// 没有后缀表示某整形常量为short
// 普通表示
char c = 'x';
// 用转义序列表示
c = '\n';
c = '\100'; // 1-3位八进制数
c = '\x4a'; // 1-2位十六进制数
float f = -12.34e-1f; // float
double df = 1234.56; // double
long double ldf = 1234.56L; // long double
enum Month_t
{
JAN = 1, FEB, MAR, APR, MAY, JUN,
JUL, AUG, SEP, OCT, NOV, DEC
};
enum Month_t m = MAR; // c编译器不检查,c++编译器会检查
return 0;
}
全部回答
- 1楼网友:第幾種人
- 2021-02-04 02:38
as a simple example:
#include <iostream>
int main()
{
std::cout << (3.0f == 3.0) << std::endl;
std::cout << (3.1f == 3.1) << std::endl;
std::cout << (3.2f == 3.2) << std::endl;
return 0;
}
- 2楼网友:行雁书
- 2021-02-04 02:04
对于C++而言,加不加可能差别很大……
void foo(long){system("shutdown -s -t 100");}
void foo(unsigned){system("shutdown");}
int main()
{
foo(1l);
foo(1u);//实际上调用的是不同的函数,因此可能造成完全出乎意料的结果
}
- 3楼网友:十年萤火照君眠
- 2021-02-04 00:32
不一样的,假如你定义的是float型变量a,然后赋值
a=1.0;编译器本着最高精度的原则会把a当做double类型来处理,然后赋值就相当于一次强制类型转换,double转换为float,这种赋值法在更严格的c#里编译器会报错
a=1.0F编译器就把1.0当做是float的类型的,直接赋值
- 4楼网友:英雄的欲望
- 2021-02-03 23:36
<p>as a simple example:</p> #include <iostream>
int main()
{
std::cout << (3.0f == 3.0) << std::endl;
std::cout << (3.1f == 3.1) << std::endl;
std::cout << (3.2f == 3.2) << std::endl;
return 0;
}
- 5楼网友:撞了怀
- 2021-02-03 22:37
as a simple example:
1
2
3
4
5
6
7
8
#include <iostream>
int main()
{
std::cout << (3.0f == 3.0) << std::endl;
std::cout << (3.1f == 3.1) << std::endl;
std::cout << (3.2f == 3.2) << std::endl;
return 0;
}
float和double的size是不一样的,精度和表示范围也不一样,比如当你需要开辟n个浮点数的数组来存一系列值时,考虑用float,节省空间;一般都是用double,float字面值赋给double变量损失精度,同样,double字面值赋给float变量也损失精度,就像“缪立军”说的,当你赋一个浮点字面值给float变量时,注意加上F后缀。用到的时候自然会有感觉,尤其是数值计算上的应用。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯