首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

北京微软 一级工程师 考试的一道题。问下面2行代码(移位操作)做了什么?小弟我朋友急考,帮看看

2012-02-28 
北京微软 一级工程师 考试的一道题。问下面2行代码(移位操作)做了什么?我朋友急考,帮看看#defineBASE0xE000

北京微软 一级工程师 考试的一道题。问下面2行代码(移位操作)做了什么?我朋友急考,帮看看
#define BASE 0xE000E100
*(volatile UINT32 *)( BASE + ((Num >> 5) << 2)) = 1 << (Num) & 0x1F);


[解决办法]
*(volatile UINT32 *)( BASE + ((Num >> 5) << 2)) = 1 << (Num) & 0x1F;
//分号前多了一个)
//在地址‘0xE000E100+Num整除8’处填写‘2的(Num%32)次方’对应的无符号32位整数。
//不保证对。

[解决办法]

探讨
//分号前多了一个)
//在地址‘0xE000E100+Num整除8’处填写‘2的(Num%32)次方’对应的无符号32位整数。
//不保证对。

[解决办法]
还真的多了。。。
[解决办法]
*(volatile UINT32 *)( BASE + ((Num >> 5) << 2)) = 1 << (Num) & 0x1F);
等号前的是32位地址对齐,硬件编程常用。
后面的不好说,表面看就是置位。


[解决办法]
在地址‘0xE000E100+Num整除32再乘4’处填写‘2的(Num%32)次方’对应的无符号32位整数。

[解决办法]
(Num >> 5) << 2
相当于把Num除以8取整后再把低位的2bit置零,不知道是干嘛……
其他的up赵老师的
[解决办法]
探讨
在地址‘0xE000E100+Num整除32再乘4’处填写‘2的(Num%32)次方’对应的无符号32位整数。

[解决办法]
BASE基地址加上Num的bit6~5的数值乘四的偏移量,再往这个地址写入Num的bit4~0。

[解决办法]
BASE基地址加上Num的bit6~5的数值乘四的偏移量,再往这个地址写入2的Num的bit4~0的数值次幂。

偏移量可能为0x00,0x04,0x08,0x0C 写入数值可能为1<<0, 1<<1, 1<<2, ... 1<<31
[解决办法]
感觉代码有误
#define BASE 0xE000E100
*(volatile UINT32 *)( BASE + ((Num >> 5) << 2)) = 1 << (Num) & 0x1F
表示低三位是偏移量(按32位),同时低5位是数据,感觉不合理,浪费了3字节,数据还复用 
应该是低三位代表偏移,高5位代表值或高三位代表偏移,低5位代表值,后边应该是错了
[解决办法]
补充下 <<优先级比&高
[解决办法]
探讨
补充下 <<优先级比&amp;高

[解决办法]
探讨

引用:
补充下 <<优先级比&amp;amp;高

确实如此。
上面我给出的答案需要纠正为:
*(volatile UINT32 *)( BASE + ((Num >> 5) << 2)) = 1 << (Num) &amp; 0x1F;
在地址‘0xE000E100+Num整除32再乘4’处填写‘(2的Num次方)除以32的余数’对应的无符号……

热点排行