下面的结果用16进制怎么表示?

amy3701229 2004-08-15 08:57:57
((0x40<<12)+(0x4<<4)+0x1)
上面的结果用16进制怎么表示?怎么算出来的啊?
...全文
150 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhangfjj 2004-08-15
  • 打赏
  • 举报
回复
做位或运算(16位)
0000 0000 0000 0000
0000 0000 0100 0000
0000 0000 0000 0001
-----------------------
0000 0000 0100 0001
即0x41
amy3701229 2004-08-15
  • 打赏
  • 举报
回复
如果是下面的数呢?
(0x40<<12)|(0x4<<4)|0x1
zhangfjj 2004-08-15
  • 打赏
  • 举报
回复
上面用的是32位系统

以turbo c 16位系统为例来分析

0x40<<12 左移12位
0000 0000 0100 0000 --->0000 0000 0000 0000

0x4<<4 左移4位
0000 0000 0000 0100 --->0000 0000 0100 0000

所以在16位编译系统中
结果应该是
0x0+0x40+0x1-->0x41
你自己分析32位编译系统中的结果吧
dhfly 2004-08-15
  • 打赏
  • 举报
回复
0x40<<12 == 0x40000
0x4<<4 == 0x40
即:
0x40000+0x40+0x1 == 0x40041
算起来很简单,每一位16位等于4位二进制,即二进制左移4位16进制就移动一位,所以第一个16进制左移3位,第二个左移一位。
leasun 2004-08-15
  • 打赏
  • 举报
回复
faint,这个问题是不是太容易了
zqpsswh 2004-08-15
  • 打赏
  • 举报
回复
0x40左移12位就是在后面加3个零 0x40000
0x4左移4位就是后面加1个零 0x40
再加0x1
就是0x40041
zhangfjj 2004-08-15
  • 打赏
  • 举报
回复
#include <stdio.h>

int main()
{
printf("%x\n",((0x40<<12)+(0x4<<4)+0x1));

}
输出:
40041

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧