"long int a=2"和"int a=2L"有什么区别?

What is difference between "long int a=2" and "int a=2L"?

本文关键字:int 什么 区别 long 2L      更新时间:2023-10-16

unsigned int a=2int a=2U之间有什么区别

此外,

sizeof(a)运算符为int a=2int a=2L提供相同的值,为什么?这个尺寸不应该加倍吗。

更新:谢谢大家的回答。这是夏天:

  1. long intint是用来声明变量的类型。CCD_ 8或CCD_ 9是用于初始化变量的值
  2. 变量的大小是由类型声明的,而不是由其初始化声明的,所以两者的大小都相同

在C++中,所有变量都用类型声明。C++强制1显式指定类型,但根本不强制初始化变量。

long int a = 2;
long int b = 2L;
long int c;

此代码生成3个相同类型的变量long int

int a = 2;
int b = 2L;
int c;

此代码生成3个相同类型的变量int

类型的思想大致是"变量可以取的所有值的集合"。它不(也不能)依赖于变量的初始值——无论是22L还是其他任何值。

所以,如果你有两个不同类型但值相同的变量

int a = 2L;
long int b = 2;

它们之间的区别在于它们可以在代码中进一步执行。例如:

a += 2147483647; // most likely, overflow
b += 2147483647; // probably calculates correctly

变量的类型从定义开始不会改变。

另一个例子:

int x = 2.5;

这里x的类型是int,并且它被初始化为2。即使初始值设定项有不同的类型,C++也认为x的声明类型"更重要"。


1BTW C++支持"类型推理";如果您希望初始值设定项的类型很重要,可以使用它:

auto a = 2L; // "a" has type "long int"
auto b = 2; // "b" has type "int"

;long int a=2〃;以及";int a=2L";?

前者将变量a定义为具有从值2初始化的类型long int,后者将其定义为具有由值2L初始化的类型int。初始化程序隐式转换为变量的类型,并且不影响变量的类型。

或者long char c='a'char c=L'a'之间有什么区别

前者将变量c定义为具有从值'a'初始化的类型long char,后者将其定义为具有由值L'a'初始化的类型char。由于类型long char不存在,因此前者是一个错误。L'a'的类型被称为wchar_t,而不是long char,在后一种情况下,再次转换为变量的类型。

或者unsigned int a=2int a=2U之间有什么区别

前者将变量a定义为具有从值2初始化的类型unsigned int,后者将其定义为具有由值2U初始化的类型int。同样,初始化程序不会影响变量的类型。

此外,

sizeof(a)运算符为int a=2int a=2L提供相同的值,为什么?这个尺寸不应该加倍吗。

由于它们都将a定义为类型int,因此sizeof(a)应该为这两者提供sizeof(int)

#include <stdio.h>
int main()
{
int a1=2;      //a1=2
int a2=2L;     //a2=2
int a3=2.5673; //a3=2
int a4='A';    //a4=65
return 0;
}

这里,即使a3a4的值分别是floatchar,该值也将被转换为int,因为a3a4被声明为int。以同样的方式,即使a2的值被设置为2L,该值也将被转换为int。变量不依赖于值,而是依赖于类型声明。inta永远是一个整数,不管它的值是多少