int和long int占用的内存不一样吗

int和long int占用的内存不一样吗,第1张

在C/C++语言中,int和long int的所占的字节数与编译器有关。

不过现在常用的编译器多认为int和long int相同,均为4字节,short为2字节,char为1字节。

如果只输入int,它是可以包含以上三种形式。

不同的语言不太一样,例如在Pascal中integer为2字节,byte为1字节,而longint为4字节。

建议您最好参考您的编译器的具体帮助,以得到更准确的信息。

使用前最好sizeof(int) 看看当前编译器如何定义的。

依据程序编译器的不同,int定义的字节数不同。(数据占用内存储器的大小不同)

常用的单片机编译器,如KEIL下,51类单片机的C语言中,int代表2个字节(16位);如果是32位RAM处理器的C语言中,则int代表4个字节(32位)

PIC单片机的PICC中8位系列单片机的C语言里int表示16位。

而不少PC端软件的编译器则会根据 *** 作系统或处理器(如64位XP)把int定义为8字节(64位)

所以在多平台上编程的人员需要在使用时注意。

如需定义16位数,可使用short(短、短整数类型)定义。

扩展资料:

在一般的电脑中,int占用4字节,32比特,

“long long int”在C语言中是64位长整型数据类型。

“long long int”在C语言中可以简写为“long long”,作为“long”和“int”数据类型的强化版数据类型,它能支持的整数范围是-2^63到2^63-1。而先前的“long”是32位长整型数据类型,整数范围仅能支持到-2^31至2^31-1。

“long long int”和“unsigned long long int”都是在C99标准中才被引进的。

扩展资料:

C99标准引入的主要新特性:

1、对编译器限制增加了,比如源程序每行要求至少支持到 4095 字节,变量名与函数名的要求支持到 63 字节 (extern 要求支持到 31)。

2、增加了新关键字 restrict,inline,_Complex,_Imaginary,_Bool。

3、支持 long long,long double _Complex,float _Complex 这样的类型。

4、持了不定长的数组。数组的长度就可以用变量了。声明类型的时候呢,就用 int a[] 这样的写法。不过考虑到效率和实现,这玩意并不是一个新类型。所以就不能用在全局里,或者 struct union 里面,如果你用了这样的东西,goto 语句就受限制了。

5、相较于C89标准,C99标准新增了一种结构体/数组的初始化方式,名叫designated initializers。

6、支持 16 进制的浮点数的描述。

7、增加了一个内置的局部静态字符数组变量 __func__ ,可以用于得到当前函数的函数名。

8、取消了不写函数返回类型默认就是 int 的规定。

参考资料来源:百度百科-C99

它们都是数据类型的一种,区别就在与取值范围,和bit大小不一样,针对不同取值,应用不同的数据类型变量。

整型(INTEGER)数据是不包含小数部分的数值型数据,用字母I表示,整型数据只用来表示整数,以二进制形式存储。

短整型的二进制位长是16,长整型的是32位。就是说长整型可以表示位数更多的整数。短整型所能表示的整数的值域为-32768~32767。

长整型则为-2147483648~2147483647。例如,如果有个数为32780,那么它只能用长整型表示,而不能用短整型表示。

长整型是程序设计中数据类型的一种表现方式,通常用long 表示长整型,long 有符号64位整数 范围是-2^63-2^63 -1 Int64unsigned long 无符号64位整数 0-2^64-1 UInt64。

整型是计算机中的一个基本的专业术语。整型值可以用十进制,十六进制或八进制符号指定,前面可以加上可选的符号(- 或者 +)。是一种智能的计算方式。

int 是 C 语言的基本整数类型,可以满足我们处理一般数据的需求。C 语言还提供了四个可以修饰 int 的关键字:short、long、signed,以及 unsigned。利用这四个关键字,C 语言标准定义了以下整数类型:

short int(可简写为 short),和 int 一样,也是有符号整数

long int(简写:long),有符号整数

long long int(简写:long long),C99 标准添加的类型,有符号整数

unsigned int(简写:unsigned),无符号整数,不能表示负数

unsigned long int(简写:unsigned long),无符号整数,不能表示负数

unsigned short int(简写:unsigned short),无符号整数,不能表示负数

unsigned long long int(简写:unsigned long long), C99 添加的类型,无符号整数

所有没有标明 unsigned 的整数类型默认都是有符号整数

参考资料:

百度百科-整型词条

这是默认的类型提升引起的问题。

第一个例子里的表达式u+i里,long long的类型比unsigned 的类型大,所以这里u会被转换成long long,u+i的结果就如输出

第二个例子的表达式里u+i里,u的类型比int大,所以i=-42会转换成unsigned。-42转换成无符号就是一个很大的值(4294967254),u+i就是输出结果了。

以下是默认类型提升的规则

同一句语句或表达式如果使用了多种类型的变量和常量(类型混用),C 会自动把它们转换成同一种类型。以下是自动类型转换的基本规则:

1 在表达式中,char 和 short 类型的值,无论有符号还是无符号,都会自动转换成 int 或者 unsigned int(如果 short 的大小和 int 一样,unsigned short 的表示范围就大于 int,在这种情况下,unsigned short 被转换成 unsigned int)。因为它们被转换成表示范围更大的类型,故而把这种转换称为“升级(promotion)”。

2 按照从高到低的顺序给各种数据类型分等级,依次为:long double, double, float, unsigned long long, long long, unsigned long, long, unsigned int 和 int。这里有一个小小的例外,如果 long 和 int 大小相同,则 unsigned int 的等级应位于 long 之上。char 和 short 并没有出现于这个等级列表,是因为它们应该已经被升级成了 int 或者 unsigned int。

3 在任何涉及两种数据类型的 *** 作中,它们之间等级较低的类型会被转换成等级较高的类型。

4 在赋值语句中,= 右边的值在赋予 = 左边的变量之前,首先要将右边的值的数据类型转换成左边变量的类型。也就是说,左边变量是什么数据类型,右边的值就要转换成什么数据类型的值。这个过程可 能导致右边的值的类型升级,也可能导致其类型降级(demotion)。所谓“降级”,是指等级较高的类型被转换成等级较低的类型。

呵呵,int站的是一个机器字,就是说根据电脑硬件的不同而不同,关于机器字是什么?查一下就知道啦。long在16微机上怎么占32位,这个很容易实现,看过微机原理的都知道,可以利用高地位去存。

在C语言中,int即整型类型,long int等同于long,为长整型类型。

二者区别与编译器相关。

1 16位编译器。

int占2字节,范围为-32768~32767

long int占4字节,范围为-2147483648~2147483647

2 32位编译器。

int 和long均占4字节,范围均为-2147483648~2147483647

3 64位编译器。

int 占4字节,范围为-2147483648~2147483647

long因平台实现不同而不同,有4字节,6字节和8字节三种。可以打印sizeof(long)查看。

下面给你例举3种方法:

一、通过基本类型强制转为,因Java的基本类型之间可以相互强转

Long l = new Long(33);

long l1 = llongValue();

int i = (int) l1;

Systemoutprintln(i);

二、可以toString()方法先转为字符串,然后再用IntegerparseInt转为int类型

Long l = new Long(33);

String s = ltoString();

int i = IntegerparseInt(s);

Systemoutprintln(i);

三、 Long的api中提供了一个intValue方法,可以转为int

Long l = new Long(33);

Systemoutprintln(lintValue());

java50提供自动装箱拆箱,Integer与int不需强转,程序会自动转换,long和Long也是一样

所以,可以这么干

Long l1 = 100L;

long l2 = l1;

int i1 = (int)l2;

Integer i2 = i1;

另一种根据Integer的api有IntegervalueOf()和new Integer();可以接受int或者String类型

把Long类型转换成int或者String类型就可以了

Long l1 = 100L;

String str = l1toString();

Integer i1 = IntegervalueOf(str);

Integer i2 = new Integer(str);

int i3 = i2;

以上就是关于int和long int占用的内存不一样吗全部的内容,包括:int和long int占用的内存不一样吗、long long int 是神马。。。是C语言里面的东西,、int和long有什么区别等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/9770978.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-01
下一篇2023-05-01

发表评论

登录后才能评论

评论列表(0条)

    保存