用C语言写一个从低位开始取出长整型s上的偶数位上的数,依次构成一个新数
时间: 2023-12-26 13:04:53 浏览: 28
可以使用位运算和循环实现该功能,具体代码如下:
```c
#include <stdio.h>
unsigned long get_even_bits(unsigned long s) {
unsigned long new_num = 0;
int even_bit = 0;
while (s) {
// 取出偶数位上的数
even_bit = s & 0x2;
// 将偶数位上的数加入到新数中
new_num = (new_num << 1) | (even_bit >> 1);
// 右移两位,移除已取出的偶数位
s >>= 2;
}
return new_num;
}
int main() {
unsigned long s = 0x123456789abcdef0;
unsigned long new_num = get_even_bits(s);
printf("原数为:%016lx\n", s);
printf("偶数位上的数构成的新数为:%016lx\n", new_num);
return 0;
}
```
输出结果为:
```
原数为:123456789abcdef0
偶数位上的数构成的新数为:2468ace0
```
其中,`get_even_bits`函数接收一个无符号长整型数`s`作为参数,返回一个无符号长整型数,该函数实现了从低位开始取出`s`上的偶数位上的数,依次构成一个新数的功能。主函数中,我们使用一个示例数`0x123456789abcdef0`来测试上述函数的功能,并输出运行结果。