1.负数二进制的表示方法
假设有一个 int 类型的数值为5,那么,我们知道它在计算机中表示为:
00000000 00000000 00000000 00000101
5转换成二制是101,不过int类型的数占用4字节(32位),所以前面填了一堆0。
原码:正数的原码按照绝对值大小转换成的二进制数;负数的原码按照绝对值大小转换成的二进制数,然后最高位补1,称为负数的原码。
反码:正数的反码与原码相同,负数的反码为对该数的原码除符号位外各位取反。
补码:正数的补码与原码相同,负数的补码为对该数的原码除符号位外各位取反,然后在最后一位加1.
比如-1的原码:10000000 00000000 00000000 00000001
反码:
补码:
可见,-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;
}