给我一段转换原码,补码,反码互相转换的c语言代码
时间: 2024-05-11 12:15:24 浏览: 94
C语言基础 原码、反码、补码和移码详解
5星 · 资源好评率100%
以下是一个简单的 C 语言程序,可实现二进制补码、原码、反码的互换:
```
#include <stdio.h>
int main() {
int num, bin, ones, twos;
printf("请输入一个十进制数:");
scanf("%d", &num);
/* 计算二进制补码 */
bin = num >= 0 ? num : ((1 << 31) + num);
printf("二进制补码为:%d\n", bin);
/* 计算二进制原码 */
printf("二进制原码为:");
for (int i = 31; i >= 0; i--) {
printf("%d", (num >> i) & 1);
}
printf("\n");
/* 计算二进制反码 */
printf("二进制反码为:");
for (int i = 31; i >= 0; i--) {
printf("%d", (~(bin >> i) & 1));
}
printf("\n");
/* 计算二进制位数 */
for (ones = 0, twos = 0; bin; bin >>= 1) {
ones += bin & 1;
twos += ones & 1;
}
/* 计算十进制补码 */
if (num >= 0) {
printf("十进制补码为:%d\n", num);
} else {
printf("十进制补码为:%d\n", -(1 << (31 - twos)) - (ones - twos));
}
/* 计算十进制原码 */
printf("十进制原码为:%d\n", num >= 0 ? num : ((1 << 31) + num));
/* 计算十进制反码 */
printf("十进制反码为:%d\n", num >= 0 ? num : -(1 << 31) - (~(num) & ~(1 << 31)));
return 0;
}
```
请注意,这只是一个简单的示例程序,可能存在不足之处。您需要了解原码、补码、反码的概念和操作规则,以避免出现编程错误。
阅读全文