C语言学习-菜鸟教程C经典100例-练习54
C语言学习-菜鸟教程C经典100例-练习54
- 题目
- 思路
- 代码(输入为8进制)
- 输出结果
- #输入为十进制
- 代码
- 输出结果
题目
取一个整数 a 从右端开始的 4~7 位。
思路
- 先把a向右移4位;
- 设置一个低四位全为1;
- 将上面两个进行&运算。
代码(输入为8进制)
#include
int main(){
unsigned int a;
printf("请输入一个整数:");
scanf("%o", &a); // 输入为八进制
printf("
=== 取 a 从右端开始的 4~7 位 ===
");
// 先把a向右移4位
unsigned int right_shift_4 = a >> 4;
// 设置一个低四位全为1, 其余全为0的数
// ~0: 所有位全为1
// ~0 << 4: 低四位全为0, 其余全为1
// ~(~0 << 4): 低四位全为1, 其余全为0
unsigned int mask = ~(~0 << 4);
// 将上面两个进行&运算
unsigned int result = right_shift_4 & mask;
printf("a 从右端开始的 4~7 位的值为:%o
", result);
return 0;
}
输出结果
请输入一个整数:36
=== 取 a 从右端开始的 4~7 位 ===
a 从右端开始的 4~7 位的值为:1
#输入为十进制
代码
#include
int main(){
unsigned int a;
printf("请输入一个整数:");
scanf("%u", &a); // 输入为十进制
printf("
=== 取 a 从右端开始的 4~7 位 ===
");
// 先把a向右移4位
unsigned int right_shift_4 = a >> 4;
// 设置一个低四位全为1, 其余全为0的数
// ~0: 所有位全为1
// ~0 << 4: 低四位全为0, 其余全为1
// ~(~0 << 4): 低四位全为1, 其余全为0
unsigned int mask = ~(~0 << 4);
// 将上面两个进行&运算
unsigned int result = right_shift_4 & mask;
printf("a 从右端开始的 4~7 位的值为:%u
", result);
return 0;
}
输出结果
请输入一个整数:36
=== 取 a 从右端开始的 4~7 位 ===
a 从右端开始的 4~7 位的值为:2









