数值的表示方法:原码,反码,补码
数值的二进制形式的最高位决定了数值的正负
1 表示正数 0表示负数
数值1:
原码:0000 0000 0000 0000 0000 0000 0000 0001
反码:0000 0000 0000 0000 0000 0000 0000 0001
补码:0000 0000 0000 0000 0000 0000 0000 0001
正数的原码,反码和补码相同
数值-1:
原码:1000 0000 0000 0000 0000 0000 0000 0001
反码:1111 1111 1111 1111 1111 1111 1111 1110
补码:1111 1111 1111 1111 1111 1111 1111 1111
负数的反码:原码的符号位保持不变,其余各位0->1,1->0
负数的补码:反码+1
广义的计算机都是以数值的补码形式进行存储的,补码的存储方式使数值计算更快
给定一个整数,输出它的补码形式:
1.使用for
#include<stdio.h>
#include<stdlib.h>
void main()
{
int num,i=1;
scanf("%d",&num);
int data=1<<31;
for(i=1;i<=32;i++)
{
printf("%c",(num&data ? '1' : '0'));
num<<=1;
if(!(i%4))
{
printf(" ");
}
}
system("pause");
}
2.使用while:
void main()
{
int num,i=1;
scanf("%d",&num);
int data=1<<31;
while(i<=32)
{
printf("%c",(num&data ? '1' : '0'));
num<<=1;
if(!(i%4))
{
printf(" ");
}
i++;
}
system("pause");
}
3.使用do....while:
void main()
{
int num,i=1;
scanf("%d",&num);
int data=1<<31;
do
{
printf("%c",(num&data ? '1' : '0'));
num<<=1;
if(!(i%4))
{
printf(" ");
}
i++;
}while(i<=32);
system("pause");
}
4.使用goto
void main()
{
int num,i=1;
scanf("%d",&num);
int data=1<<31;
AAA:if(i<=32)
{
printf("%c",(num&data ? '1' : '0'));
num<<=1;
if(!(i%4))
{
printf(" ");
}
i++;goto AAA;
}
system("pause");
}
5.使用递归:
void buma(int n,int i)
{
int data=1<<31;
if(i<=32)
{
printf("%c",(n&data ? '1' : '0'));
n<<=1;
if(!(i%4))
{
printf(" ");
}
i++;buma(n,i);
}
system("pause");
}
void main()
{
int num;
scanf("%d",&num);
buma(num,1);
system("pause");
}
给定一个整数,输出它的原码形式
1.使用for:
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
void main()
{
int num, i = 1;
scanf("%d", &num);
int data = 1 << 31;
if(num<0)
{
num=~num+1;
num=num|data;
}
for (i = 1; i <= 32; i++)
{
printf("%c", (num&data ? '1' : '0'));
num <<= 1;
if (!(i % 4))
{
printf(" ");
}
}
system("pause");
}
2.使用while:
void main()
{
int num, i = 1;
scanf("%d", &num);
int data = 1 << 31;
if (num < 0)
{
num = ~num + 1;
num = num | data;
}
while (i<=32)
{
printf("%c", (num&data ? '1' : '0'));
num <<= 1;
if (!(i % 4))
{
printf(" ");
}
i++;
}
system("pause");
}
3.使用do...while...
void main()
{
int num, i = 1;
scanf("%d", &num);
int data = 1 << 31;
if (num < 0)
{
num = ~num + 1;
num = num | data;
}
do
{
printf("%c", (num&data ? '1' : '0'));
num <<= 1;
if (!(i % 4))
{
printf(" ");
}
i++;
} while (i <= 32);
system("pause");
}
4.使用goto:
void main()
{
int num, i = 1;
scanf("%d", &num);
int data = 1 << 31;
if (num < 0)
{
num = ~num + 1;
num = num | data;
}
AAA: if (i <= 32)
{
printf("%c", (num&data ? '1':'0'));
num <<= 1;
if (!(i % 4))
{
printf(" ");
}
i++;
goto AAA;
}
system("pause");
}
5.使用递归:
void Trueform(int n, int i)
{
int data = 1 << 31;
if (n < 0)
{
n = ~n + 1;
n = n | data;
}
if (i <= 32)
{
printf("%c", (n&data ? '1' : '0'));
n <<= 1;
if (!(i % 4))
{
printf(" ");
}
i++;
Trueform(n, i);
}
}
void main()
{
int num;
scanf("%d", &num);
Trueform(num, 1);
system("pause");
}
给定一个整数,输出它的反码形式
1.使用for:
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
void main()
{
int num, i = 1;
scanf("%d", &num);
int data = 1 << 31;
if (num < 0)
{
num = num - 1;
}
for (i = 1; i <= 32; i++)
{
printf("%c", (num&data ? '1' : '0'));
num <<= 1;
if (!(i % 4))
{
printf(" ");
}
}
system("pause");
}
2.使用while:
void main()
{
int num, i = 1;
scanf("%d", &num);
int data = 1 << 31;
if (num < 0)
{
num = num - 1;
}
while (i<=32)
{
printf("%c", (num&data ? '1' : '0'));
num <<= 1;
if (!(i % 4))
{
printf(" ");
}
i++;
}
system("pause");
}
void main()
{
int num, i = 1;
scanf("%d", &num);
int data = 1 << 31;
if (num < 0)
{
num = num - 1;
}
do
{
printf("%c", (num&data ? '1' : '0'));
num <<= 1;
if (!(i % 4))
{
printf(" ");
}
i++;
} while (i <= 32);
system("pause");
}
4.使用goto:
void main()
{
int num, i = 1;
scanf("%d", &num);
int data = 1 << 31;
if (num < 0)
{
num = num - 1;
}
AAA: if (i<=32)
{
printf("%c", (num&data ? '1' : '0'));
num <<= 1;
if (!(i % 4))
{
printf(" ");
}
i++;
goto AAA;
}
system("pause");
}