根据《C程序设计》第三版12.3题,谭教授给的答案好像无法得出正确结果
(至少我这里是),这里给出个方法。
//逻辑右移, 以符号位开头为1, 右移的时候补充0, 算术右移就是补充1
{
...
scanf(%o, %d", &value, &n); //value 就是要右移的值, n是右移多少位
unsigned short z;
z=(~(~0<<(16-n));
printf("%o", z & (value>>n));
...
}
}
在这里讲解下 value=0173253(八进制) n=4
~0 1111 1111 1111 1111
~0<<(16-4) 1111 0000 0000 0000
~(~0<<(16-4)) 0000 1111 1111 1111 ----z
value>>n 1111 1111 0110 1010
z & (value>>n) 0000 1111 0110 1010
其他的以此类推。