有符号十进制转二进制:
————最左边的位为符号位,0为正,1为负
————正十进制转二进制,除2求余,逆序排序
————负十进制转二进制,去负号转二进制,二进制取反,加一,逆序排序
#include <stdio.h>
int main(void)
{
long int nums; // 长整型,八字节
scanf("%ld", &nums);
int size = 0, tem = 0; // 计数值,进位值
int binary_system[64] = {0}; // 八字节二进制数组
if (nums < 0) // 判断正负
{
nums = -nums; // 负数转正
while (nums) // 转为二进制
{
binary_system[size] = nums % 2; // 求余
size++;
nums /= 2; // 除二
}
for (int i = 0; i < 64; i++) // 全部取反
{
if (binary_system[i] == 1)
{
binary_system[i] = 0;
}
else
binary_system[i] = 1;
}
binary_system[0] = binary_system[0] + 1; // 二进制加一
for (int i = 0; i < 64; i++)
{
binary_system[i] = binary_system[i] + tem; // 判断是否需要进位
tem = 0;
if (binary_system[i] > 1)
{
binary_system[i] = binary_system[i] - 2;
tem = 1;
}
if (tem == 0) // 没有要进位的了
{
break;
}
}
for (int i = 63; i >= 0; i--) // 打印,逆序打印,高位数据在高地址
{
printf("%d", binary_system[i]);
}
}
else // 正数
{
while (nums) // 转二进制
{
binary_system[size] = nums % 2;
size++;
nums /= 2;
}
for (int i = 63; i >= 0; i--) // 逆序打印
{
printf("%d", binary_system[i]);
}
}
return 0;
}