专注收集记录技术开发学习笔记、技术难点、解决方案
网站信息搜索 >> 请输入关键词:
您当前的位置: 首页 > C语言

什么是低八位跟高八位

发布时间:2011-06-28 13:32:03 文章来源:www.iduyao.cn 采编人员:星星草
什么是低八位和高八位?
C/C++ code
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
    union 
    {
          int i;
          struct
          {
                char first;
                char second;
          }sql_l;
    }number;
    number.i=0x4445;
    printf("%c%c%x\n",number.sql_l.first,number.sql_l.second,number.i);
    number.sql_l.first='c'; 
    number.sql_l.second='d';
    printf("%x\n",number.i);
    system("pause");
    return 0;
}

程序的输出结果为:
ED4445
6463
从上面的结果可以看出:当给i赋值后,其低八位是first的值,而高八位是second的值,
当给first和second赋字符后,i的值也跟随发生变化。 
===================================================
上面是书上的一个例题,我不明白他说的这句话"其低八位是first的值,而高八位是second的值"什么是低八位?什么是高八位?该怎么判断它是低八位还是高八位呢?去百度查,不知这是属于那方面的知识,新人不解,请详解!

------解决方案--------------------
这个问题跟union的存储方式有关
union在存储的时候,在内存中开辟的是union中最长类型的字节数,所有的成员共用这个空间

这个例子里,union在内存中开辟的是一个int类型的空间(一般是4字节),sql_l与i共用这个4字节的空间,但是由于sql_l只占用2个字节,
所以sql_l的成员first占用低8位(就是Byte0),second占用高8位(就是Byte1);

union只存储最新的成员的值,所以修改某个成员的时候,会导致其他成员的值变化

------解决方案--------------------
0x4455 二进制形式-->0100 0100 0100 0101
从右往左数是从第0位到第15位,红的是高八位,蓝的是低八位
------解决方案--------------------
在struct
{
char first;
char second;
}sql_l;
中,first在second的前面,所以first占低8位了,second占高8位了。
------解决方案--------------------
探讨
这个问题跟union的存储方式有关
union在存储的时候,在内存中开辟的是union中最长类型的字节数,所有的成员共用这个空间

这个例子里,union在内存中开辟的是一个int类型的空间(一般是4字节),sql_l与i共用这个4字节的空间,但是由于sql_l只占用2个字节,
所以sql_l的成员first占用低8位(就是Byte0),second占用高8位(就是Byte1);

union只存储最新的成员的值,所以修改某个成员的时候,会导致其他成员的值变化
友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。

其他相似内容:

热门推荐: