取無符號整數 a 從右端起第 4~7 位(即位 3~6,0-based)。
b = a >> 4; 目標位移至最低 4 位。c = ~(~0 << 4); 即 0xF(低 4 位全 1)。d = b & c; 保留目標 4 位,其餘清零。#include <stdio.h>
int main() {
unsigned a, b, c, d;
printf("輸入八進制整數: ");
scanf("%o", &a);
b = a >> 4;
c = ~(~0u << 4); // 0xF
d = b & c;
printf("原值: %o\n結果: %o\n", a, d);
return 0;
}
~0 全 1,左移 4 位得高位全 1 低 4 位 0,再取反得低 4 位全 1。unsigned 避免符號位擴展影響。