计算机基础系统第二章练习(2)

1.tmin函数
设计一个函数,返回长度为n位(1<=n<=32)的有符号整数能表示的最小负数。

函数原型为:int tmin(int n);

例如: tmin(3)=-4,tmin(6)=-32;

main函数已经写好了,请根据main函数内容完成该函数的设计:

int main(){

int n;

scanf("%d",&n);

printf("%d\n",tmin(n));

return 0;

}
函数:

int tmin(int n){
    int a=1;
    for(int i=0;i<n-1;i++){
        a=2*a;
    }
    return -a;
}

2.twosComplement函数
设计一个函数,用于输出一个整型数据的32位二进制补码编码。

函数原型为:void twosComplement(int x);

例如:twosComplement(-1)的输出为:11111111111111111111111111111111

main函数已经写好了,请根据main函数的内容完成该函数的设计:

int main(){

int x;

scanf("%d",&x);

twosComplement(x);

return 0;

}
代码:

#include<stdio.h>
void twosComplement(int x){
    int b,i;
	for(i=31;i>=0;i--){
		b=(x>>i)&1;
		printf("%d",b);
		}		  
}
int main(){

    int x;

    scanf("%d",&x);

    twosComplement(x);

    return 0;

}

3.binMirror函数
设计一个函数,该函数返回一个整数数据的二进制镜像数。所谓二进制镜像数,是指二进制表示和该数的二进制表示正好逆序的数。

例如:二进制序列1010的逆序列是0101

函数原型为:int binMirror(int x);

例如:binMirror(1)=-2147483648

main函数已经写好了,请根据main函数的内容完成该函数的设计:

int main(){

int x;

scanf("%d",&x);

printf("%d\n",binMirror(x));

return 0;

}
函数

int binMirror(int x){
  int b,i,d=0,e=0;
	for(i=31;i>=0;i--){
		b=(x>>i)&1;		
		if(b==1){
		d=(1<<(31-i));	
		e=(d^e);
		}
	  
		}
		return e;
		}
		

4.bitCount函数
设计一个函数,用于返回一个整型数据中1的个数。

函数原型为:int bitCount(int x);

例如:bitCount(5) = 2, bitCount(7) = 3

main函数已经写好,请根据main函数的内容完成该函数的设计:

int main(){

int x;

scanf("%d",&x);

printf("%d\n",bitCount(x));

return 0;

}
函数:

int bitCount(int x){
    int b,i,c=0;
	for(i=0;i<32;i++){
		b=(x>>i)&1;
		if(b==1)
		 c++;
		}
		return c;	  
}

5.logicalShift函数
对有符号整型数据使用>>右移运算符进行操作进行的是算术右移。现在请设计一个函数,要求对有符号整型数据进行逻辑右移。

该函数的原型是:int logicalShift(int x, int n);(0<=n<=31)

例如:logicalShift(0x87654321,4) 的结果应该为 0x08765432

main函数已经写好了,请根据main函数的情况完成该函数的设计:

int main(){

int x,n;

scanf("%x%d",&x,&n);

printf("%x\n",logicalShift(x,n));


return 0;

}

函数:

int logicalShift(int x, int n){
int y = 32+(~n);
  return (x>>n)&((1<<y)+(~0)+(1<<y));
}

6.getByte函数
设计一个函数:int getByte(int x, int n);

该函数将参数x的值的第n个字节取出(0 <= n <= 3)并返回

例如:getByte(0x12345678,1) = 0x56

main函数已经写好,请根据main函数的内容,完成该函数的设计:

int main(){

int x,n;

scanf("%x%d",&x,&n);  //注意,x以16进制格式输入 

printf("%x\n",getByte(x,n)); //结果以16机制格式输出 

return 0;

}
函数:

int getByte(int x, int n){
        
    int b,i,a=0,c=0,d=0,e=0;
	for(i=n*8;i<(n+1)*8;i++){
		
		b=(x>>i)&1;
		
		
		d=(b<<a++);
			
		e=(d^e);
		
		}
		return e;	 
}

7.clearMask函数
设计一个函数:int clearMask(int x, int n);

该函数将参数x的值的第n位设置为0(0 <= n <= 31)并返回新的值

例如:clearMask(7, 5) = 7

main函数已经写好,请根据main函数的内容,完成该函数的设计:

int main(){

int x,n;

scanf("%d%d",&x,&n);

printf("%d\n",clearMask(x,n));

return 0;

}
函数:

int clearMask(int x, int n){
		int a=~(1<<n);
		return x&a;	 
}

8.setMask函数
设计一个函数:int setMask(int x, int n);

该函数将参数x的值的第n位设置为1(0 <= n <= 31)并返回新的值

例如:setMask(7, 5) = 39

main函数已经写好,请根据main函数的内容,完成该函数的设计:

int main(){

int x,n;

scanf("%d%d",&x,&n);

printf("%d\n",setMask(x,n));

return 0;

}
函数:

int setMask(int x, int n){
	int a=(1<<n);
		return x|a;	 
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值