vc6.0里面的int和long都是4字节储存空间,那分出的长整型有什么特殊作用?

如题所述

是这样的,传统的int类型实际上指向short,是用2个字节存储的,那个时代的计算机都是16位的。直到32位操作系统(比如Windows)出现,才开始淘汰旧用法。

现在64位系统的长整型默认用的是8字节存储空间。以后还会出128位操作系统/256位操作系统,那么默认整型会分别提高到16字节/32位字节。

为什么呢?因为:
4位计算机指的是基本运算寄存器只能存储1个字节(0000~1111,即0~F),所有寄存器都围绕1个字节进行寻址/计算
8位计算机指的是基本运算寄存器只能存储2个字节(0000 0000~1111 1111,即00~FF),所有寄存器都围绕2个字节进行寻址/计算

16位计算机指的是基本运算寄存器只能存储4个字节(0000 0000 0000 0000~1111 1111 1111 1111,即0000~FFFF),所有寄存器都围绕4个字节进行寻址/计算

32位计算机指的是基本运算寄存器只能存储8个字节(即0000 0000~FFFF FFFF),所有寄存器都围绕8个字节进行寻址/计算

64位计算机指的是基本运算寄存器只能存储16个字节(即0000 0000 0000 0000~FFFF FFFF FFFF FFFF),所有寄存器都围绕16个字节进行寻址/计算追问

我是想问,在vc中int和long既然都是4字节那他们的用法是否有什么区别(除了书写和输入输出格式上)。

追答

在VC上是没有区别的,但是你的源程序如果移植到别的操作系统和编译器(比如DOS下的TURBO C)这时如果你把int当做long来使用,就会发生溢出错误。为了避免这种情况,你可以打开编译器开关,比如强制通知VC将int当做short处理,以符合ANSI C标准,是可以的,具体你可以参考#pragma编译器开关。另一种情况,为了优化目标执行的速度,32位系统会有“对齐”处理。比如你这样写程序:
struct MyDef{
long x;
short y;
};
这时如果你使用sizeof(struct MyDef);会发现结果是8而不是6,因为编译器认为使用长度为4的整数来控制结构变量,会有提高运行速度的优点。很多情况下(比如网络通信协议和数据文件存储)我们不希望这种“数据对齐”方法,因为会造成通信失败,或者文件读取数据紊乱,因此用#pragma开关在上面程序之前加上:
#pragma pack(0)
来强制要求编译器在为结构变量分配内存时,用变量本身的定义的结构长度,拒绝对齐优化。

温馨提示:内容为网友见解,仅供参考
无其他回答

vc6.0里面的int和long都是4字节储存空间,那分出的长整型有什么特殊作用...
是这样的,传统的int类型实际上指向short,是用2个字节存储的,那个时代的计算机都是16位的。直到32位操作系统(比如Windows)出现,才开始淘汰旧用法。现在64位系统的长整型默认用的是8字节存储空间。以后还会出128位操作系统\/256位操作系统,那么默认整型会分别提高到16字节\/32位字节。为什么呢?因为:4...

c语言中int和long都是4个字节,那他们都底有什么区别,在内存中又是怎样...
不同的编译器对于int和long的划分不同,如果划分字节数一样的话,那么在内存中的效果也应该是一样的,没有区别的。

32位机下,int和long型用sizeof来测试都是4个字节,那为什么说long能够存 ...
VC6.0中int和long的字节数都是4,在这可以说他们可以容纳的范围是一样的,但在其他编译器中就要因情况而定!

vc++6.0对于int和long int的数据长度一样,为什么要分开定义
不同平台, int 和long int 长度可能不一样,x86系列CPU采用little endian方式存储数据,简单的说就是数据的高字节在低地址,低字节在高地址。 32位系统你可能看不出来差别,因为int 和long int都在内存中占4个字节,但是早期的16位和64位系统就不同了:16位,int占2个字节,long int占4个字节。6...

在VC6.0里将long int型数据赋值给int型变量后为什么数值不变
VC6.0里 long (也作 long int ) 和 int 都是4个字节32位的,是一样的。long long int 是8字节64位的。如果你想测试数据类型强制转换的截断效应,可以:1.把 long int a 改为 long long int a; 并将a设为大于等于 2^32 的值;或者 2.把 int b 改为 short b。

C语言在vb6.0下占多少字节?
C语言在VC++6.0环境中编译,整型变量占4个字节,范围是-2147483648-2147483647。1)基本型:类型说明符为int,在内存中占4个字节;2)短整型:short int或short,所占字节和取值范围基本相同;3)长整型:long int或long,在内存中占4个内存;4)无符号型:为unsigned。在书写变量定义时,需注意:1...

VC6.0中int与long 两种数据类型有什么区别?
不同的编译器会分配不同的空间,还跟计算机是多少位的有关,不过一般long是int的两倍长度。long的定义是其所占用的存储空间大小不小于int。long 和int只是(可能会)存储空间大小不同,而读取两者中的数据时使用的方法规则是一样的。__int64 和long long是系统定义的两个基本类型的类型名 虽是两个不...

int和long int在32位下都是4字节,有什么区别么。?
int是整型数据,long int是长整型,能用int表达的数据可以用long int表达,反过来不可以,如11可以为0011,但是1111不可以省略为11..如果用long int表达又会浪费内存所以根据数据长度来选择数据类型。肯定有区别。

C中整型和长整型有什么区别?除了一个占据2个字节另一个占据4个字节?谢 ...
一个字节少 ,一个存字节多,在标准C中的int的字节长度小于long大于short就行了,多数平台上int占4个字节(32位,不是16位!),所以能表示的范围就是2的32次方,表示为数值是-2^(32-1) ~ 2^(32-1) -1 ( ^ 表示成方 )(就是 -2^31 ~ 2^31 - 1, 而不是2^16...)根据不同的...

C++ int型和long int型有什么区别
(1)在VC下没有区别。两种类型均用4个字节存放数据。(2)VC是后出的编译器,之前有很多早期的C编译器,在早期编译器下long int占4个字节,int占2个字节。(3)之所以有“整型”和“长整形”两种不同类型,是C语言在诞生时发明者规定好的,前者存储的整数的值域小于后者。这个问题不用牵肠挂肚,...

相似回答