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

#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() - 1;
	for (; i >= 0; i--) {
		putchar((x >> i) & 1u ? '1' : '0');
	}
	putchar('\n');
}

unsigned set(unsigned x, int pos) {
	if (((x >> pos) & 1u) == 0) x += (unsigned)pow(2, pos);	/*运算符的优先级请注意*/
	return x;
}
unsigned reset(unsigned x, int pos) {
	if (((x >> pos) & 1u) == 1) x -= (unsigned)pow(2, pos);
	return x;
}
unsigned inverse(unsigned x, int pos) {
	if (((x >> pos) & 1u) == 1) x -= (unsigned)pow(2, pos);
	else x += (unsigned)pow(2, pos);
}

int main(void) {
	unsigned a[10] = { 2 };
	int i = 0;
	puts("请输入无符号整数:"); scanf("%u", &a[0]);
	puts("请输入更改位数:"); scanf("%d", &i);
	printf("%u内部表示为:\n", a[0]); print_bits(a[0]);
	putchar('\n');

	a[1] = set(a[0], i);
	printf("第%d位更改为1,结果是:%u\n", i, a[1]);
	printf("新数字内部表示为:\n"); print_bits(a[1]);
	putchar('\n');

	a[2] = reset(a[0], i);
	printf("第%d位更改为0,结果是:%u\n", i, a[2]);
	printf("新数字内部表示为:\n"); print_bits(a[2]);
	putchar('\n');

	a[3] = inverse(a[0], i);
	printf("第%d位相反,结果是:%u\n", i, a[3]);
	printf("新数字内部表示为:\n"); print_bits(a[3]);
	putchar('\n');

	return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值