c语言进制

来源:互联网 发布:sql server打开mysql 编辑:程序博客网 时间:2024/06/06 01:08

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;     }
原创粉丝点击