是否都声明和启动一个长整数?
我希望这对这个论坛来说不是太基本的问题。我想知道上述两个语句是否实现相同的事情,即声明一个长整数变量 num 并将其初始化为 24。谢谢。
long int num = 24;
和int num = 24L
一样吗?
他们是不同的。
第一个“创建”一个类型变量,long int
并将int
值 24隐式转换为long int
赋值前的类型。第二个“创建”一个类型变量,int
并将long int
值 24隐式转换为int
赋值前的类型。
不,long int
声明一个 long int,并int
声明一个 int 变量。变量的类型从不取决于它被“初始化”的值(更准确地说,分配给)。因此,当且仅当类型long int
和int
在您的环境中相同时,这两个声明是相同的。
不完全是。long int
并且int
不能保证,但应该是不同的尺寸。
long int num = 24;
这是安全24
的,就像 int 一样,即(隐式)提升为long int
.
int num = 24L;
一般来说,这并不安全。24L
定义 a long int
,即“截断”为int
,如果sizeof(int)
<sizeof(long int)
可能有问题。
为什么是“一般”和“可以”?因为在这种情况下,两件事都是一样的,而且是安全的。但是假设执行以下操作:
int num = xL;
可以容纳但不能x
容纳的大数字在哪里?然后你有一个溢出。long int
int
不,变量的类型由变量的类型定义,仅由其左侧的类型定义:
long int num
将变量声明num
为 long int;int num
将变量声明num
为 int。同时,等号的右边也是独立定义的。
24
是一个整数;24L
是一个长整数右手边(在这种情况下是24
or 24L
)可能会被强制(即改变)以适应左手边(在这种情况下是变量num
),但绝不会反过来。
需要区分变量的类型和用于初始化变量的常量的类型。
第一个声明声明了一个long int
变量并将其初始化为值24L
(将整数常量转换为 后得到的值24
)long int
。第二个声明声明一个int
变量并将其初始化为该值24
(这是您将长整型常量24L
转换为. 后得到的值int
。)