8位十六进制数占多少字节,比如0x12345678这是多少字节?
一位十六进制代表四位二进制,
0x12345678转换成二进制就是0001 0010 0011 0100 0101 0110 0111 1000
而每八位二进制占一个字节,
所以8位十六进制数占4字节
问0x12345678是多少?
#include <stdio.h>
int main()
{
union {
int a; long b; unsigned char c;
} m;
m.b = 0x12345678;
printf("%d\n", m.c);
return 0;
}
0x12345678,这个是16进制的表示方法
一位十六进制代表四位二进制,转换成2进制:
1 0010 0011 0100 0101 0110 0111 1000
0001 0010 0011 0100 0101 0110 0111 1000
1字节等于8位,char型占1字节,int型占4字节,long型占8字节, union {int a; long b; unsigned char c; } m;
由于m是个联合结构,所以整个结构在内存中占一个long这么大的空间, (从大小来看,1个long分成8个char组成,每个char占1字节(也就是8位), 一位十六进制代表四位二进制,所以每个char可以放两个十六进制的数字, 也就是可以放8个二进制的数字) 所以每个char的空间内可以放同时三个元素a,b,c共用这段内存
好了,
由于m.b = 0x12345678;
所以,赋值后这段内存空间内的值就为:
0001 0010 0011 0100 0101 0110 0111 1000 (低32位,)
好了,unsigned char c;
c是个unsigned char类型
所以只取低8位二进制位,转成无符号char类型的数:0111 1000
这8位二进制数,转成10进制数,就是120,
所以printf("%d\n", m.c);
以10进制整数的形式输出m.c就是120。