C++中的short类型变量在内存中不是两个字节的吗?

为什么C++中定义的几个short类型的变量在内存中不是两个字节的例如:#include <iostream>using namespace std;int main(){ int a,b,c,d; cout<<&a<<endl<<&b<<endl<<&c<<endl<<&d<<endl; return 0;}运行结果为:

第一 你的变量都是int类型的 并不是short类型的, 它们在16位机器中是相等的, 但是如果是32位的机器不等的。所以你的每个地址相差4;
第二 你最好不要用这种方法测试, 因为你这样连续的定义变量,并不能保证这些变量在内存中也会
依次排列,这种行为是未定义的, 取决于编译器。
第三 楼上的说了 看 类型大小 用操作符 sizeof。追问

我那个打错了,我是用short类型定义的。而且我的是64位机器,并且我用sizeof函数看过short类型是占用两个字节的。你是说这样连续定义的变量,在内存中不会依次排列,真的是这样吗?

追答

嗯 对啊, 你定义的是short类型的变量,按照我们很自然地理解两个连续定义的变量之间地址的差值应该就是sizeof (short)的值了,
但是 编译器在处理这种语句时,
第一连续定义的变量不一定会连续排列,有可能&a的值是0x01,而&b的值为0x20.
第二很多编译器还是会将它们连续的排列,就像第一点所说的这不是强制的要求,取决于编译器。
第三编译器存放定义的变量时,不是将第二个定义的变量放在紧跟在第一个变量之后的位置上,
比如像你的这个程序,假如a存放在0x00, b不会放在0x02,因为为了让CPU取数据时效率高,编译器会自动将地址进行对齐,比如在32位机器上,取数据都是4个字节4个字节的取,b就会被放在0x04上,这样虽然损失了内存,但是速度加快了,因为可以直接取到a和b,如若不然,你b放在0x02,我
要取得a,先将0x00 0x01 0x02 0x03的数据放进CPU,再把0x02 0x03的数据剔除,效率降低了。

温馨提示:内容为网友见解,仅供参考
第1个回答  2013-07-21
short int 是2字节。
C 语言标准中规定了 short int 是2字节,long int 是4字节。

C 语言标准中没有规定 int 型,但绝大多数编译器自行规定 int 型 处理成 long int. 个别老编译器把 int 型 处理成 short int.

你声明的 int a,b,c,d; 被处理成long int, 为 4 字节。所以地址间隔 4。
你可以用 sizeof(int) 来确认int 是不是 4字节。追问

我那里打错了int,我用short定义的abcd的。而且已经用过sizeof函数确认是占用两个字节的。

第2个回答  2013-07-21
你的abcd又没有赋值,亲。。
记得short基本都是2个字节的。我了解的编译器中都是。
int就不同编译器改变较大。
你要知道变量内存大小应该用
sizeof()!!!!
第3个回答  2013-07-20
不同的编译器占用字节不一样
第4个回答  2013-07-21
不用编译器不同编译环境都可能影响的说
第5个回答  2013-07-20
是不是64位机器 ?或者编译环境是?追问

我用sizeof函数来获取short类型的字节数,它结果是显示2的。例如:
#include
using namespace std;
int main()
{
int i=sizeof(short);
cout<<i<<endl;
return 0;
}

C++中的short类型变量在内存中不是两个字节的吗?
第一 你的变量都是int类型的 并不是short类型的, 它们在16位机器中是相等的, 但是如果是32位的机器不等的。所以你的每个地址相差4;第二 你最好不要用这种方法测试, 因为你这样连续的定义变量,并不能保证这些变量在内存中也会 依次排列,这种行为是未定义的, 取决于编译器。第三 楼上的说...

shortshort数据类型(C\/C++)
C语言提供了一种整型数据类型,称为short,用于创建整数值的变量。例如,声明一个名为i的短整型变量可以写为:short i;关于short类型的长度,其实际大小取决于编译器的设置。根据标准规定,short类型的最小字节数应为16位,即占用两个字节。在limits.h头文件中,定义了short类型的上下限范围:SHRT_MIN...

short类型的取值范围是多少?
C和C++:在C和C++中,"short" 是一个有符号的整数类型,通常占用2个字节(16位),其取值范围为 -32,768 到 32,767。Java:在Java中,"short" 也是一个有符号的整数类型,占用2个字节,其取值范围为 -32,768 到 32,767,与C和C++中的相同。Python:Python没有明确的 "short" 类型。在Pytho...

C++标准规定short int占几个字节
在32位系统中int占32位,也就是4个字节,而在老式的16位系统中,int占16位,即2个字节。而C++标准中只限制规定short int不能超过int的长度,具体长度的可以由C++编译器的实现厂商自行决定。目前流行的32位C++编译器中,通常int占4字节,short int占2字节。其中short int可以简写为short。类似地,C++...

c++中什么是短整型的高位和低位
短整型是short int. 在32系统下一般是16位,占两个字节. 高位8位字节可以称高位字节,低8位字节可以称为低位字节。如short int i = 0x0F12. 其中0F是高位字节, 0x12是低位字节.在little endian的系统下, 低位置字节0x12在内存低地址, 高位字节0x0F在内存高地址。

C语言中short与int有什么区别
short在内存中占2个字节,即16个二进制位,能表示的最大为-2^15~2^15-1即十进制整数-32768~32767 int在内存中占4个字节,即32个二进制位,能表示的最大为-2^31~2^31-1即十进制整数-2147483648~2147483647 比如说你定义short,输入32768就会出现上溢,在输出就不是32768了 ...

C++中短整数(short int)占用几个字节?
回答:标准 C 和 C++ 的 short 都是 2 个字节(16 位元,可表达 ??32768 到 32767)。char 才是 1 个字节。

short和int的区别是什么?
1、int:int占用32字节,32比特。2、short:短整型变量不得低于16位,即两个字节。二、范围不同 1、int:数据范围为-2147483648~2147483647[-2^31~2^31-1]。2、short:数据范围为范围-32768~+32767。三、特点不同 1、int:除了int类型之外,还有short、long、long long类型可以表示整数。2、short...

c++中各类型数组长度
用于储存这些程序员直接声明的变量的内存区域叫栈,是一种高速连续的内存区域,其大小是有限制的,不超过2M。一个int型数据占有4个字节,那么能声明2 * 1024 *1024 \/4=524288个。当然这是一种假设。回答补充:一个int数据一共有4*8=32位,其中第一位是符号位,不计入,他可以表达最大的数值...

linux c++short类型占多少位
short 是 2字节 16位

相似回答