两者都声明&启动一个长整数?
我希望对于这个论坛来说这不是一个基本问题。我想知道上述两个语句是否实现相同的目的,即声明一个长整数变量num并将其初始化为24.谢谢。
答案 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 int
和int
在您的环境中相同时,这两个声明是相同的。
答案 2 :(得分:2)
不完全是。我不保证long int
和int
,但应该是不同的尺寸。
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 然后可以强制右侧(在这种情况下为24
或24L
)(即更改)以适合左侧(在这种情况下)变量num
),但从不反过来。
答案 4 :(得分:1)
需要区分变量的类型和用于初始化变量的常量的类型。
第一个声明声明了一个long int
变量,并将其初始化为值24L
(这是将整数常量24
转换为long int
后得到的)。第二个声明声明了一个int
变量并将其初始化为值24
(这是将长整数常量24L
转换为int
后得到的结果。)