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;
}