c语言进制

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(floatnumber,charchars[40]);


    intmain()
    {

        charchars[40];
     GetErJinZhi(1.25,chars);


    }
     char*GetErJinZhi(floatnumber,charchars[40])
     {

        inti,n=1,index=0,tmpnum=0,number1;
        floatnumber2;
        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));

      returnchars;

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值