碎碎念念
首先把它变成二进制,由于在原码上变换,所以正负分开算,负数就最高位放1,然后减一,正数直接加一。
8位 代码
可算:-127~127
代码语言:javascript复制#include<stdio.h>
void output(int num[])//输出函数
{
int i;
for(i=0;i<8;i )
printf("%d",num[i]);
printf("n");
}
void minus(int number)//负数操作
{
int i=8,num[8];
number=-number;
num[0]=1;//负数最高位就置1
while(--i)//转二进制
{
num[i]=number%2;
number=number/2;
}
output(num);
i=7;
while(1)//减一操作
{
if(num[i]==1)
{
num[i]=0;
break;
}
num[i--]=1;
}
output(num);
}
void plus(int number)//正数操作
{
int i=8,num[8];
num[0]=0;
while(--i)//转二进制
{
num[i]=number%2;
number=number/2;
}
output(num);
i=7;
while(1)//加一操作
{
if(num[i]==0)
{
num[i]=1;
break;
}
num[i--]=0;
}
output(num);
}
int main()//主函数
{
int number;
scanf("%d",&number);
if(number<0)
minus(number);
else
plus(number);
}
16位 代码
可算:-32767~32767
代码语言:javascript复制#include<stdio.h>
void output(int num[])//输出函数
{
int i;
for(i=0;i<16;i )
printf("%d",num[i]);
printf("n");
}
void minus(int number)//负数操作
{
int i=16,num[16];
number=-number;
num[0]=1;//负数最高位就置1
while(--i)//转二进制
{
num[i]=number%2;
number=number/2;
}
output(num);
i=15;
while(1)//减一操作
{
if(num[i]==1)
{
num[i]=0;
break;
}
num[i--]=1;
}
output(num);
}
void plus(int number)//正数操作
{
int i=16,num[16];
num[0]=0;
while(--i)//转二进制
{
num[i]=number%2;
number=number/2;
}
output(num);
i=15;
while(1)//加一操作
{
if(num[i]==0)
{
num[i]=1;
break;
}
num[i--]=0;
}
output(num);
}
int main()//主函数
{
int number;
scanf("%d",&number);
if(number<0)
minus(number);
else
plus(number);
}