vc6.0里面的int和long都是4字节储存空间,那分出的长整型有什么特殊作用?
1个回答
展开全部
是这样的,传统的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个字节进行寻址/计算
现在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)
来强制要求编译器在为结构变量分配内存时,用变量本身的定义的结构长度,拒绝对齐优化。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询