首页 新闻 会员 周边 捐助

short数据类型的长度?

0
悬赏园豆:5 [已解决问题] 解决于 2012-05-29 11:51
#include <iostream>
using std::cout;

int main()
{
    unsigned short shortVar = 5;
    unsigned long longVar = 65535;
    long sVar = -65535;
    
    cout << "shotVar: \t" << shortVar;
    cout << "\t Address of shortVar: \t";
    cout << &shortVar << "\n";
    
    cout << "longVar: \t" << longVar;
    cout << "\t Address of longVar: \t";
    cout << &longVar << "\n";
    
    cout << "sVar: \t" << shortVar;
    cout << "\t Address of sVar: \t";
    cout << &sVar << "\n";
    
    system("pause");
    return 0;
    }

运行结果:

 

为什么unsigned short的类型是6个字符(0x28ff46-0x28ff40=6)长度?
c++
waynewuzhenbo的主页 waynewuzhenbo | 初学一级 | 园豆:189
提问于:2012-05-26 12:36
< >
分享
最佳答案
0

编译器在分配变量的时候会4字节对齐。所以变量的地址并不是完全靠在一起的,有间隔。

收获园豆:5
Greatest | 小虾三级 |园豆:678 | 2012-05-28 16:49
其他回答(2)
0

short 应该是2字节才对。至少也不应该是6字节。

你这样测试,或许更有效果:

写一个struct,连续定义这两个变量,再取地址,结果绝对不会是6.

无之无 | 园豆:5095 (大侠五级) | 2012-05-26 13:29

请问这两种方法有什么区别?

支持(0) 反对(0) waynewuzhenbo | 园豆:189 (初学一级) | 2012-05-26 13:52

@扎西德勒: 写成struct后,struct是一个数据结构,数据会按紧凑的格式存储,但是,写在类里的,可能会因为编译或运行的环境因素,相邻的两个变量的地址并非连续的。

或者你可以在现有的基础上反复运行或反复重新编译后运行,得到的结果可能是不同的。

支持(0) 反对(0) 无之无 | 园豆:5095 (大侠五级) | 2012-05-26 14:03

@笨笨蜗牛: 谢谢。

支持(0) 反对(0) waynewuzhenbo | 园豆:189 (初学一级) | 2012-05-29 11:52
0

直接sizeof(unsigned short)看下不就知道占多少字节了

romi | 园豆:206 (菜鸟二级) | 2012-05-29 10:13
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册