123666666 发表于 2022-5-16 22:54:57

取一个整数a从右端开始的4~7位。

【程序54】题目:取一个整数a从右端开始的4~7位。
程序分析:可以这样考虑:
(1)先使a右移4位。
(2)设置一个低4位全为1,其余全为0的数。可用~(~0<<4)
(3)将上面二者进行&运算。
2.程序源代码:
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);
}

123666666 发表于 2022-5-16 22:55:54

看都看不懂,救命

jackz007 发表于 2022-5-16 23:08:40

#include <stdio.h>

int main(void)
{
      unsigned a , d         ;
      scanf("%u" , & a)      ;
      d = (a / 1000) % 10000 ;
      printf("%u\n" , d)   ;
}
      编译、运行实况:
D:\\>g++ -o x x.c

D:\\>x
123456789
3456

D:\\>

123666666 发表于 2022-5-16 23:15:29

jackz007 发表于 2022-5-16 23:08
编译、运行实况:

秒懂。


例题答案的的解法不行是吗?

jackz007 发表于 2022-5-17 00:47:07

123666666 发表于 2022-5-16 23:15
秒懂。




      题目要求不严谨,上面的代码是按十进制位考虑的,如果按二进制位考虑,代码应该是下面这样:
#include <stdio.h>

int main(void)
{
      unsigned a , d   ;
      scanf("%u" , & a);
      d = (a >> 4) & 0xf ;
      printf("%u\n" , d) ;
}
      编译、运行实况:
D:\\>g++ -o x2 x2.c

D:\\>x2
125
7

D:\\>x2
4085
15

D:\\>
页: [1]
查看完整版本: 取一个整数a从右端开始的4~7位。