給正整數 A (≤100),輸出其二進制最低位 1 所代表的值。例:26 (11010) → 2;88 (1011000) → 8。
A & -A 直接得到最低位 1 的值(利用二進制補碼特性)。或循環右移計數。
int main() {
int a;
while (scanf("%d", &a) && a) {
printf("%d\n", a & -a);
}
return 0;
}
-A = ~A + 1,只有最低位 1 及其右側 0 會在 A 和 -A 中同時為 1,與運算保留該位。