C语言十进制原码转二进制的函数接口
时间: 2023-08-08 12:05:52 浏览: 82
以下是将十进制原码转换为二进制的C语言函数接口:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char *dec_to_bin(int decimal_num) {
int is_negative = 0;
char *binary_str = (char *)malloc(sizeof(char) * 33);
memset(binary_str, 0, sizeof(char) * 33);
// 判断数字是否为负数
if (decimal_num < 0) {
is_negative = 1;
decimal_num = abs(decimal_num);
}
// 将数字转换为二进制
int index = 0;
while (decimal_num > 0) {
binary_str[index++] = (decimal_num % 2) + '0';
decimal_num /= 2;
}
// 如果是负数,需要将二进制字符串取反后再加1
if (is_negative) {
for (int i = 0; i < strlen(binary_str); i++) {
binary_str[i] = (binary_str[i] == '0') ? '1' : '0';
}
binary_str = add_one(binary_str);
}
// 反转字符串
int len = strlen(binary_str);
for (int i = 0; i < len / 2; i++) {
char tmp = binary_str[i];
binary_str[i] = binary_str[len - i - 1];
binary_str[len - i - 1] = tmp;
}
return binary_str;
}
char *add_one(char *binary_str) {
int carry = 1;
int len = strlen(binary_str);
char *result = (char *)malloc(sizeof(char) * (len + 1));
memset(result, 0, sizeof(char) * (len + 1));
for (int i = len - 1; i >= 0; i--) {
char digit = binary_str[i];
if (digit == '0' && carry == 1) {
result[i] = '1';
carry = 0;
} else if (digit == '1' && carry == 1) {
result[i] = '0';
} else {
result[i] = digit;
}
}
if (carry == 1) {
result[0] = '1';
}
return result;
}
```
调用方式:
```c
#include <stdio.h>
int main() {
// 将十进制数 -10 转换为二进制
char *binary_str = dec_to_bin(-10);
printf("%s\n", binary_str); // 输出结果为 10001010
free(binary_str);
return 0;
}
```
这个函数可以将任意十进制数字转换为二进制,包括负数。当输入为负数时,会将其转换为原码后再转换为二进制。需要注意的是,返回的二进制字符串需要手动释放。
阅读全文