main()
{
unsigned a,b,c,d;
scanf("%o",&a);
b=a>>4;
c=~(~0<<4);
d=b&c;
printf("%o\n%o\n",a,d);
}
请问该程序是怎么实现的,具体点
c=~(~0<<4);这句说下详细执行过程
main()
{
unsigned a,b,c,d;
scanf("%o",&a);
b=a>>4;
c=~(~0<<4);
d=b&c;
printf("%o\n%o\n",a,d);
}
请问该程序是怎么实现的,具体点
c=~(~0<<4);这句说下详细执行过程
源码就有问题 就是少楼上的
至于你说的那句就简单说下
根据运算优先级 现运算括号类的~0《4 由于取反的优先级高于按位左移 所以二进制代码变为全是1
然后左移4位 那么低四位补0(这里要说明的是不同的编译器采用不同的方法 分逻辑移位和算术移位)
然后取反 低四位置1 高4位置0 然后与右移4位的整数相与 既是保留右移4位后的整数的高四位