‘壹’ C中,编程求无符号整数的补码,请帮我分析一下这个程序,谢谢,请看补充:
这个程序用的是8进制。
输入数据 %o 是8进制
0100000 是8进制 常数。等于 十进制32768 , 等于 十六进制 0x8000
if(z==0100000) 判断符号位
正数的原码反码补码一样,就是自己
负数的补码是除符号位外的反码加1
无符号整数的补码 -- 费解。
‘贰’ C语言程序题,任意输入一个整数,编一个程序,使其输出输出相应的原码、反码及补码。
代码资料:
#include "stdio.h"
#include "limits.h"
void myout(unsigned n){
unsigned k;
for(k=~INT_MAX;k>0;k>>=1)
printf("%d",n&k || 0);
}
int main(int argc,char *argv[]){
int n;
printf("Enter n(int)... n=");
if(scanf("%d",&n)!=1){
printf("Input error, exit... ");
return 0;
}
printf("%d: ",n);
printf("原码: ");
myout(n>=0 ? n : (~n+1)|~INT_MAX);
printf(" 反码: ");
myout(n>=0 ? n : ~(-n));
printf(" 补码: ");
myout(n);
putchar(' ');
return 0;
}
‘叁’ 整数的补码怎么表示
整数的补码表示:
补码的最高位:0表示正数,1表示负数。
数据位:正数就是数值的二进制数;
负数是取原数绝对值的二进制数,每一位取反(0、1互换)后,末位加1。
‘肆’ C语言,输出补码
求补码的函数可以参考下面的代码,我们知道,在内存中,正数的补码等于他本身,所以直接返回a。负数的补码正是它在内存中的存在形式,这是我们定义一个unsigned int型的数值去用它来赋值,取得的就是他的补码的二进制形式。为了验证,我另外编写了一个函数,用来输出二进制,请参考。
unsigned int buma(int a)//用来求得补码
{
if(a>=0)
return a;
else
{
unsigned int temp=a;
return temp;
}
}
void twoprint(unsigned int a)//用来输出二进制
{
int temp=a%2;
if(a/2==0)
{
cout<<a<<" ";return ;
}
twoprint(a/2);//这里采用了递归调用的方法
cout<<temp<<" ";
}
‘伍’ 怎样用C语言编写一个实现求任意整数X的补码
正整数的补码就是它本身
负整数的补码就是它在内存中的存储值
#include
void
main()
{
int
n;
scanf("%d",
&n);
printf("n的补码:%x\n",
n);/*
16进制和2进制等价
*/
}
如果你的任意整数要求1000位数或者更大,那就要用数组来存储,并按照补码规则来计算:负数的补码就是对反码加一,而正数不变。
‘陆’ c补码的代码写法
c语言补码的表示方法是:正数的补码就是其本身,负数的补码是在其原码的基础上,符号位不变,其余各位取反,最后+1 (即在反码的基础上+1)。
[+1] = [00000001](原码) = [00000001](反码) = [00000001](补码) [-1] = [10000001](原码) = [11111110](反码) = [11111111](补码) 对于负数,补码表示方式也是人脑无法直观看出其数值的。通常也需要转换成原码在计算其数值。 一、原码 求原码:X≥0,则符号位为0,其余照抄; X≤0,则符号位为1,其余照抄。 【例1】X=+1001001 [X]原 = 01001001 【例2】X=-1001001 [X]原 = 11001001 二、反码 求反码:若X≥0,符号位为0,其余照抄; 若X≤0,符号位为1,其余按位取反。 【例3】X=+1001001 [X]反 = 01001001 【例4】X=-1001001 [X]反 = 10110110 三、补码 求补码:若X≥0,符号位为0,其余照抄; 若X≤0,符号位为1,其余取反后,最低位加1。 【例5】X=+1001001 [X]补 = 01001001 【例6】X=-1001001 [X]补 = 10110111