将该数字不断除以2直到商为零,然后将余数由下至上依次写出,即可得到该数字的二进制表示
以20转二进制为例:
#includevoid transfer(int x) { char buf[32]; int i=0; while( (x/2)!=0 ) { buf[i] = x%2; x = x/2; i++; } buf[i] = x%2; for(int j=i; j>=0 ;j--) { printf("%d",buf[j]); } printf("n"); } int main(void) { int x; while(1) { printf("请输入一个10进制数:"); scanf("%d",&x); if(x<0) break; printf("%d的二进制是:",x); transfer(x); printf("n"); } printf("退出程序n"); return 0; }
负数十进制转换二进制的方法:
换成二进制后(带符号位),取反,加1
以int型(4个字节)的-5为例子:
5 的原码: 00000000 00000000 00000000 00000101
-5 的原码:10000000 00000000 00000000 00000101
-5 的反码:11111111 11111111 11111111 11111010(符号位不变)
-5 的补码:11111111 11111111 11111111 11111010
+ 1
=11111111 11111111 11111111 11111011
因此,-5 二进制为:11111111 11111111 11111111 11111011
转换为十六进制为:0xFFFFFFFB



