1、问题描述
有两个int型变量a 和 n要求写一个表达式,使该表达式的值和a的第n位相同
2、不全面的实现
在单片机程序中经常见到的实现是
(a & (1 << n)) >> n
但需要注意的是该实现当n是31的时候,若正好是个负数,则符号位为1,右移31位后得出的结果并不是1!
3、正确解法
(a >> n) & 1
该方法在 0 <= n <= 31的情况下都成立。
时间: 2024-10-25 13:28:28
1、问题描述
有两个int型变量a 和 n要求写一个表达式,使该表达式的值和a的第n位相同
2、不全面的实现
在单片机程序中经常见到的实现是
(a & (1 << n)) >> n
但需要注意的是该实现当n是31的时候,若正好是个负数,则符号位为1,右移31位后得出的结果并不是1!
3、正确解法
(a >> n) & 1
该方法在 0 <= n <= 31的情况下都成立。