“long int num = 24;”和“int num = 24L;”做同样的事?

时间:2013-03-31 12:34:50

标签: c

两者都声明&启动一个长整数?

我希望对于这个论坛来说这不是一个基本问题。我想知道上述两个语句是否实现相同的目的,即声明一个长整数变量num并将其初始化为24.谢谢。

5 个答案:

答案 0 :(得分:6)

  

long int num = 24;int num = 24L是否相同?

他们是不同的。

第一个“创建”long int类型的变量,并在分配之前将int值24隐式转换为long int类型。 第二个“创建”int类型的变量,并在分配之前将long int值24隐式转换为int类型。

答案 1 :(得分:4)

不,long int声明一个long int,int声明一个int变量。变量的类型决不会取决于它“初始化”的值(更确切地说,分配给它)。因此,当且仅当类型long intint在您的环境中相同时,这两个声明是相同的。

答案 2 :(得分:2)

不完全是。我不保证long intint,但应该是不同的尺寸。

long int num = 24;

这是安全的,因为24是一个int,它被(隐式)提升为long int

int num = 24L;

这不是那么安全。 24L定义了一个long int,即int被“截断”,如果sizeof(int)< sizeof(long int) int num = xL; 可能会出现问题。

为什么“一般”和“可能”?因为在这种情况下,两件事都是相同且安全的。但是假设做了类似的事情:

x

其中long int是一个很大的数字,可以放在int但不能放在{{1}}中?然后你有一个溢出。

答案 3 :(得分:1)

没有。变量的类型由变量的类型定义,仅由其左侧的类型定义:

  • long int num将变量num声明为long int;
  • int num将变量num声明为int。

同时,equals的右侧也是独立定义的。

  • 24是一个int;
  • 24L是一个long int

然后可以强制右侧(在这种情况下为2424L)(更改)以适合左侧(在这种情况下)变量num),但从不反过来。

答案 4 :(得分:1)

需要区分变量的类型和用于初始化变量的常量的类型。

第一个声明声明了一个long int变量,并将其初始化为值24L(这是将整数常量24转换为long int后得到的)。第二个声明声明了一个int变量并将其初始化为值24(这是将长整数常量24L转换为int后得到的结果。)