北京微软 一级工程师 考试的一道题。问下面2行代码(移位操作)做了什么?小弟我朋友急考,帮看看
北京微软 一级工程师 考试的一道题。问下面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位整数。
//不保证对。
[解决办法]
[解决办法]还真的多了。。。
[解决办法]*(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赵老师的
[解决办法][解决办法]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位代表值,后边应该是错了
[解决办法]补充下 <<优先级比&高
[解决办法][解决办法]