#include<stdio.h>void main(){ char a='a',b='b';int p,c,d;p=a;p=(p<<8)|b;d=p&0xfff;c=(p&0xfff00)>>8;printf("a=%d\nb=%d\nc=%d\n=%d\nd=%d\n",a,b,c,d);}/*请问d=p&0xfff是什么意思,还有c=(p&0xfff00)>>8;这一步。求大神指点,希望解题步骤详细。*/
2 回答
太阳雨下
TA贡献7条经验 获得超1个赞
1. 假设p=a(97),二进制表示就是0110 0001
2. p<<8,结果就是 0110 0001 0000 0000
3. 然后与b(0110 0010)或
p: 0110 0001 0000 0000
b: 0000 0000 0110 0010
或之后结果:
p: 0110 0001 0110 0010
4. d = p&oxfff就是
0000 0110 0001 0110 0010
0000 0000 1111 1111 1111
相与(只有都为1是才为1)所以之后就是:
d: 0000 0000 0001 0110 0010
5. c=(p&0xfff00)>>8
就是将p的后2个字节清零,然后右移8位
p: 0110 0001 0110 0010
与之后:
p: 0110 0001 0000 0000
右移8位
p: 0000 0000 0110 0001
这里有与的操作就相当于释放其不用的内存,如果没有与的操作,得到的c的结果是一样的(因为32位系统中整形占4个字节),不过内存有块就没释放,不与之后的场景(非加粗部分是c的值):
0000 0000 0110 0001 0110 0010
- 2 回答
- 0 关注
- 1385 浏览
添加回答
举报
0/150
提交
取消