二进制 十进制数的转换

1.负数二进制的表示方法

假设有一个 int 类型的数值为5,那么,我们知道它在计算机中表示为:

00000000 00000000 00000000 00000101

5转换成二制是101,不过int类型的数占用4字节(32位),所以前面填了一堆0。


原码:正数的原码按照绝对值大小转换成的二进制数;负数的原码按照绝对值大小转换成的二进制数,然后最高位补1,称为负数的原码。

反码:正数的反码与原码相同,负数的反码为对该数的原码除符号位外各位取反

补码:正数的补码与原码相同,负数的补码为对该数的原码除符号位外各位取反,然后在最后一位加1.

比如-1的原码:10000000 00000000 00000000 00000001

反码:     11111111 11111111 11111111 11111110(除符号位按位取反)

补码:     11111111 11111111 11111111 11111111

可见,-1在计算机里用二进制表达就是全1。16进制为:0xFFFFFF

正零和负零的补码相同,[+0]补=[-0]补=0000 0000B


2.C语言中怎么把一个十进制的负数以二进制的形式输出

#include<stdio.h>
void  prt_byte(  int  n )
{
     if  ( n>1 )
         prt_byte(n/2);
     printf ( "%d" , n%2 );
}
void  main()
     int  n=-100;
     if  ( n<0 )
     {
         printf ( "-" );
         n=-n;
     }
     prt_byte(n);
     printf ( "\n" );
}

3.小数的二进制算法

小数的二进制算法就是 取小数位然后乘2取整

#include <stdio.h>
#include<string.h>
     
   
      char *GetErJinZhi( float number, char chars[40]);
     
  
     int main()
     {
       
         char chars[40];
      GetErJinZhi(1.25,chars);
      
 
     }
      char *GetErJinZhi( float number, char chars[40])
      {
      
         int i,n=1,index=0,tmpnum=0,number1;
         float number2;
         char     chars2[8];
     
        chars[31]= '\0' ;
        chars2[7]= '\0' ;
 
       number1=( int )number;
     number2=number-( int )number;
  
       for (i=0;i<31;i++)
       {
             chars[31-1-i]=(number1&n)==0? '0' : '1' ;
             n<<=1;
       }
 
       do
       {
         number2=number2-( int )number2;
         number2*=2;
         chars2[index++]=( int )number2+48;
       } while ((number2- ( int )number2)&&index<7);
           chars2[index]= '\0' ;
       printf ( "%s\n" ,chars2);
 
       strcat (chars, "." );
       printf ( "%s" , strcat (chars,chars2));
 
       return chars;
      
      }


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值