C语言大一新生
C语言大一新生
C语言大一新生
∽(∽0<<4) ?

~ ( ~ 0 << 4 )的执行过程,大致如下:
设置一个低4位全为1,其余为全为0的数:
首先对0取反(~)后的低8位为: 1111 1111 ,其余为都为1;
然后左移4位后的低8位为:1111 0000 ,其余位为1;
然后再取反后的低8位为:0000 1111,其余位为0;
经过以上几个步骤,即得到前面提到的数 。
测试如下:
参考链接:
https://c.biancheng.net/view/1795.html
https://www.runoob.com/cprogramming/c-operators.html
#include <stdio.h>
int main(void){
unsigned a,b,c,d;
printf("请输入整数:\n");
// https://c.biancheng.net/view/1795.html
// 从输入获取一个八进制整数,存入变量a中
// 输入八进制数36,其对应的二进制数的低8位为:0001 1110 ,其余为都为0
scanf("%o",&a);
// https://www.runoob.com/cprogramming/c-operators.html
// 第一步:
// 将a右移4位的结果赋值给b,即将整数a的第4到第7位移到第0到第3位
// a右移4位后的低8位为:0000 0001 ,其余位都为0
b=a>>4;
// 第二步:
// 设置一个低4位全为1,其余为全为0的数
// 首先对0取反(~)后的低8位为: 1111 1111 ,其余为都为1
// 然后左移4位后的低8位为:1111 0000 ,其余位为1
// 然后再取反后的低8位为:0000 1111,其余位为0
// 经过以上几个步骤,即得到前面提到的数
c=~(~0<<4);
// 第三步:
// 用第一步和第二步的结果进行按位与(&)操作,即得到整数a的第4到第7位的数
// 输入:36
// 第一步的低8位为:0000 0001,其余位为0
// 第二步的低8位为:0000 1111 ,其余位为0
// 然后它们进行按位与操作后的低8位为:0000 0001,其余位为0,即将整数a的第4到第7位提取出来
d=b&c;
// 以八进制的形式打印a和提取出的第4到第7位的数
printf("%o\n%o\n",a,d);
return 0;
}
