由于浮点数还需要考虑浮点数的存储方式,所以目前暂时提供正数的补码、反码、移码
源代码如下:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void showvaluebin(int bits, int value)
{
int i;
for(i = bits-1; i >=0; i–)
{
if(value & (1 << i))
{
printf("1");
}
else
{
printf("0");
}
}
}
int getsign(int inum)//获取符号位
{
int isign = inum >> 31;
if(isign)//高位为1为负数
return 1;
else
return 0;
}
int complemental_code(int inum)//补码
{
int isign = getsign(inum);
if(isign)
{
inum = ones_complement_code(inum)+1;
return inum;
}
else
{
return inum;
}
}
int ones_complement_code(int inum)//反码
{
int isign = getsign(inum);
if(isign)//为负数
{
inum = ~inum;
inum |= 1 << 31;
return inum;
}
else
{
return inum;
}
}
int frame_shift(int inum)//移码
{
int isign = getsign(inum);
if(isign)
{
inum &= ~(1 << 31);
return inum;
}
else
{
inum |= 1 << 31;
return inum;
}
}
int true_code(int inum)
{
int isign = getsign(inum);
if(isign)//负数在内存中是以补码的形式存在
{
inum = complemental_code(inum);
return inum;
}
else
{
return inum;
}
}
int main(int argc, char* argv[])
{
/*****************************************************
1. 正数:
正数的原码、反码、补码都相同。
2. 负数:
原码:负数的绝对值,并且最高位为1。
反码:原码的符号位不变,其他位按位取反。
补码:在反码的基础上+1。
3. 移码:
无论是正/负数,都是在补码的基础上,符号位取反。
******************************************************/
int true_code1 = true_code(4);
int true_code2 = true_code(-4);
int complemental_code1 = complemental_code(4);
int complemental_code2 = complemental_code(-4);
int ones_complement1 = ones_complement_code(4);
int ones_complement2 = ones_complement_code(-4);
int frame_shift1 = frame_shift(4);
int frame_shift2 = frame_shift(-4);
printf("true_code1=%drn", true_code1);
printf("true_code2=%drn", true_code2);
printf("complemental_code1=%drn", complemental_code1);
printf("complemental_code2=%drn", complemental_code2);
printf("ones_complement1=%drn", ones_complement1);
printf("ones_complement2=%drn", ones_complement2);
printf("frame_shift1=%drn", frame_shift1);
printf("frame_shift2=%drn", frame_shift2);
printf("rn");
showvaluebin(32, 4);
printf("rn");
showvaluebin(32, -4);
printf("rn");
return 0;
}
结果如下:
true_code1=4
true_code2=-2147483644
complemental_code1=4
complemental_code2=-2147483644
ones_complement1=4
ones_complement2=-2147483645
frame_shift1=-2147483644
frame_shift2=2147483644
00000000000000000000000000000100
11111111111111111111111111111100
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/c-cdevelopment/607412.html