c语言的补码程序
‘壹’ c语言求二进制补码 源代码
输入任意整数,输出码胡32位的蚂模厅补码。
输入其他,结束程序。
#include<stdio.h>
int main()
{
int i,num=0;
char s[33]={0};
while(1==scanf("%d",&num)){
for(i=0;i<32;i++){
s[i]= (0x01 & (num>>闷隐(31-i))) ? '1' : '0' ;
}
printf("%s\n",s);
}
return 0;
}
‘贰’ c语言 补码程序
这是求第i位的补码是0还是1的意思
x & 1就是求x和1相与,<<皮和(15-i)就燃饥盯是左移动15-i位,这么说应该明白了吧肢族
‘叁’ 用C语言编一个程序,使给出一个数的原码,求得反码,补码。
#include<stdio.h>
int main(){
int i,j,k;
int a[16], af[16], ab[16];//af存储反码,ab存储补码第0位为符号位
char b[16];
scanf("%s", b);
for(i = 0; b[i] != '\0'; i++){
a[i] = b[i] - '0';
}
j = i-1;
ab[0] = af[0] = a[0];//符号位始终不变
if(a[0] == 1){//当从屏幕输入的是负数,则作相应变换
for(i = j; i > 0; i--){
af[i] = 1 - a[i];
ab[i] = a[i];
if(a[i] == 1){
i--;
break;
}
}
k = i;
for(; i > 0; i--)
af[i] = 1 - a[i];
for(i = k; i > 0; i--)//补码从末位数起第一个不为0,以后均取反
ab[i] = 1 - a[i];
}
else{//如果是正数,则全部复制
for(i = j; i > 0; i--){//正数反码、补码都与原码相同
af[i] = a[i];
ab[i] = a[i];
}
}
printf("对应的反码是:\n");
for(i = 0; i <= j; i++)
printf("%d", af[i]);
printf("\n");
printf("对应的补码是:\n");
for(i = 0; i <= j; i++)
printf("%d", ab[i]);
}
在vc下编译测试通过。另,本代码未考虑输入非法问题,所输入的数字智能由1和0组成
‘肆’ 怎样用C语言编写一个实现求任意整数X的补码
正整数的补码就是它本身
负整数的补码就是它在内存中的存储值
#include
void
main()
{
int
n;
scanf("%d",
&n);
printf("n的补码:%x\n",
n);/*
16进制和2进制等价
*/
}
如果你的任意整数要求1000位数或者更大,那就要用数组来存储,并按照补码规则来计算:负数的补码就是对反码加一,而正数不变。
‘伍’ C语言,输出补码
7的二进制0000
0000
0000
0111,~是按位反,结果是 1111
1111
1111
1000
注意最高位是1,说明这是个负数,负数在计算机中是补码,补码是十进制多少呢,把补码负号不变,其它取反,最后加1,这个就是原码.即1000
0000
0000
0111+1
=1000
0000
0000
1000是-8 公式~n
结果是
-(n+1)
‘陆’ C语言求原码的补码问题
必须要用无符号数,位运算的规定就是如此,你想,如果有符号是负数,用哪个来位运算,结果呢
进行与运算是判断该数是否最大的负数,注意补码的数值范围,负数比正数多一个,该数为最小负数,表示范围内没有对应的正数
‘柒’ c语言程序:设计一个函数,使给出一个数的原码,能得到该数的补码。
#include <闭皮stdio.h>
unsigned short getbits(unsigned short);
void main()
{
unsigned short a;
unsigned short gebits(unsigned short);
printf("input a number:\茄者n");
scanf("颤态薯%o",&a);
printf("result:%o\n",getbits(a));
}
unsigned short getbits(unsigned short value)
{unsigned short z;
z=value&0100000;
if(z==0100000)
z=~value+1;
else
z=value;
return(z);}
‘捌’ C语言程序题,任意输入一个整数,编一个程序,使其输出输出相应的原码、反码及补码。
程序如下:
#include<stdio.h>
void main()
{
int a,b;
char oper;
scanf("%d%c%d",&a,&并稿者oper,&b);
switch(oper)
{
case '+':
printf("%d+%d=%d ",a,b,a+b);
break;
case '-':
printf("%d-%d=%d ",a,b,a-b);
break;
case '*':
printf("%d*%d=%d ",a,b,a*b);
break;
case '/'绝薯:
printf("敬悄%d/%d=%f ",a,b,(1.0*a)/b);
break;
case '%':
printf("%d%%%d=%d ",a,b,a%b);
break;
default:
break;
}
}