标题:新人求助一个小小问题
只看楼主
qq949392025
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2011-11-12
结帖率:0
已结贴  问题点数:20 回复次数:3 
新人求助一个小小问题
#include <stdio.h>
int main()
{
    int a=131073;
    printf("%d\n",a);
    short *b=&a;
    printf("%d %d",*b,*(b+1));
    system("pause");
    return 0;
}

这样子 输出结果 是 1  2
如果 把a的值换成5
输出结果是         5  0
 
这是怎么回事。谁给个解释
搜索更多相关主题的帖子: include system return 
2011-11-12 22:53
heroinearth
Rank: 10Rank: 10Rank: 10
来 自:云南曲靖
等 级:青峰侠
帖 子:430
专家分:1506
注 册:2011-10-24
得分:20 
是因为int,和short的长度不一样,int因编译器不同可能是16位或是32位,而short是16位,你用*b后只能读取低16位中的内容,*(b+)又是下一个16位中的内容
2011-11-12 23:05
qq949392025
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2011-11-12
得分:0 
你能给出 他的具体实现吗。比如 写出 每个数字在 内存 中的  表示 形式。。。那样子看的 会比较直接 ,,我也明白 你说的这个意思 。但是 我不懂 补码。等 一些 码制的 运算和换算 。。谢谢了
2011-11-12 23:17
heroinearth
Rank: 10Rank: 10Rank: 10
来 自:云南曲靖
等 级:青峰侠
帖 子:430
专家分:1506
注 册:2011-10-24
得分:0 
数据在内存中的存储是底字节在前,高字节在后,就如131073的16进制表示是20001,在内存中的存储是:01000200,*b指向的是0100,*(b+1)指向的是02开始的单元,int占了四个字节
5的16进制是:5,在内存中是05000000,
2011-11-12 23:27



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-355118-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.079388 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved