龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 软件开发 > C/C++开发 >

学点 C 语言(16): 数据类型 - 关于常量的前缀、后缀

时间:2009-12-22 15:42来源:未知 作者:admin 点击:
分享到:
曾经对 float num = 3.14f; 这样的赋值非常疑惑, 其实现在也不明白. 既然说明了是 float 类型, 又何必在 3.14 后面挂个 f 呢? 书上说: int num = 100; 一个整数常量将默认为 int 类型(除非常数有后缀

曾经对 float num = 3.14f; 这样的赋值非常疑惑, 其实现在也不明白.

既然说明了是 float 类型, 又何必在 3.14 后面挂个 f 呢?

书上说: 

int num  = 100; 一个整数常量将默认为 int 类型(除非常数有后缀或超出了 int 的范围)

double num = 3.14; 一个浮点数常量将默认为 double 类型

并要求:

long num        = 100L;

long long num     = 100LL;

unsigned long     = 100UL;

unsigned long long num = 100ULL;

float num = 3.14f;

这些后缀是大小写无关的、(U 和 L是)无顺序的; 我反复测试, 看不出没有区别.

我觉得这些东西用于 #define 还说得过去, 用于指定类型的变量有必要吗?

我猜唯一的必要性或许是让编译器少转换一次.

不过知道还是有好处, 以免看不懂别人的代码.

总之, 前人应该自有道理, 希望谁知道能告诉我.

另外, 如果是十六进制或八进制常数, 将从 int、unsigned、long、unsigned long 中自动选择最小的类型.

  其他情况:

#include 

#include 

int main(void)

{

  char c = 'a';

  char cs[] = "abc";

  wchar_t wc = L'A';   /* 这个 L 也可以省略 */

  wchar_t ws[] = L"ABC"; 

  int n1 = 65535;

  int n2 = 0xFFFF;    /* 十六进制  */

  int n3 = 0Xffff;    /* 大小写都行 */

  int n4 = 0177777;   /* 八进制   */

  printf("%c, %s, %c, %Sn", c, cs, wc, ws);

  printf("%d, %d, %d, %dn", n1, n2, n3, n4);

  

  getchar();

  return 0;

}

精彩图集

赞助商链接