#include <stdio.h>
#include <math.h>
int count_bits(unsigned x) {
int bits = 0;
while (x) {
if (x & 1u) bits++;
x >>= 1;
}
return bits;
}
int int_bits(void) {
return count_bits(~0u);
}
void print_bits(unsigned x) {
int i = int_bits(x) - 1;
int n = 1;
for (; i >= 0; i--) {
putchar(((x >> i) & 1U) ? '1' : '0');
}
}
int main(void) {
unsigned a, b1, c1, b2, c2;
int i;
printf("非负整数a :"); scanf("%u", &a);
printf("位移数i :"); scanf("%d", &i);
b1 = a << i; c1 = a >> i;
printf("a = "); print_bits(a); putchar('\n');
printf("b1 = a << i : "); print_bits(b1); putchar('\n');
if (count_bits(a) == count_bits(b1))
{
b2 = (unsigned)a * pow(2, i);
printf("b2 = a * 2^%d : ", i); print_bits(b2); putchar('\n');
if (b1 == b2) printf("无符号整数位左移后的值等于其乘以2的指数幂后的值。\n");
else printf("无符号整数位左移后的值不等于其乘以2的指数幂后的值。\n");
}
else printf("数据溢出了。\n");
printf("c1 = a >> i : "); print_bits(c1); putchar('\n');
c2 = (unsigned)a * pow(2, -i);
printf("c2 = a * 2^%d : ", -i); print_bits(c2); putchar('\n');
if (c1 == c2) printf("无符号整数位右移后的值等于其除以2的指数幂后的值。\n");
else printf("无符号整数位右移后的值不等于其除以2的指数幂后的值。\n");
return 0;
}
【明解C语言入门篇】练习7-2个人答案
最新推荐文章于 2024-10-10 09:38:20 发布