【明解C语言入门篇】练习7-2个人答案

#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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值