问0x12345678是多少?

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。

转载自:C++问题 求问0x12345678是多少,具体怎么算的 还有为何结果输出120_百度知道https://zhidao.baidu.com/question/1445738509925918820.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值