负数十进制转换二进制 C语言
时间: 2025-01-30 08:31:51 浏览: 36
C语言中负十进制数转二进制的方法
在C语言中处理负十进制数转换为二进制时,通常会涉及到补码的概念。对于有符号整数,在计算机内部是以其补码形式表示的。因此,要将一个负十进制数转换为其对应的二进制字符串,可以先求得该数值绝对值的原码再通过取反加一得到补码。
下面给出一段简单的代码用于展示这一过程:
#include <stdio.h>
#include <limits.h>
void dec_to_bin(int n){
unsigned int un = (unsigned int)(n);
char bin[32];
int i, pos = 0;
if(n >= 0){
do{
bin[pos++] = '0' + (un % 2);
un /= 2;
}while(un != 0);
while(pos < sizeof(int)*8) // 补齐位宽至int类型的字节数乘以8
bin[pos++] = '0';
for(i=pos-1;i>=0;i--)
putchar(bin[i]);
}
else {
un = ~((unsigned int)-n)+1; // 对-n做按位非运算后再加1即获得n的补码
for(i=sizeof(int)*8-1 ;i>=0 ;i--){
putchar('0'+ ((un >> i)&1));
}
}
puts("");
}
int main(){
int number=-9;
printf("The binary representation of decimal %d is ",number);
dec_to_bin(number);
return 0;
}
这段程序定义了一个dec_to_bin()
函数用来接收一个整型参数并打印出相应的二进制串[^4]。当传入的是正数时直接按照常规方式计算;而对于负数,则通过对它的相反数(-n)进行按位非(~
)操作再加上1来获取其补码表示法下的二进制序列。
相关推荐


















