读书人

什么是低八位跟高八位

发布时间: 2012-09-02 21:00:34 作者: rapoo

什么是低八位和高八位?

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只存储最新的成员的值,所以修改某个成员的时候,会导致其他成员的值变化

读书人网 >C语言

热点推荐