1.ilog2函数
定义ilog2函数 - 返回 floor(log base 2 of x), x > 0 (即求以2为底x的对数,且向下取整)
函数原型为:int ilog2(int x);
例如:ilog2(17) = 4
main函数已经写好了,请根据main函数的内容完成该函数的设计:
int main(){
int x;
scanf("%d",&x);
printf("%d\n",ilog2(x));
return 0;
}
函数:
int ilog2(int x)
{ int n=2,j=0;
while(n<=x){
n=2*n;
j++;
}
return j;
}
2.isLessOrEqual函数
设计一个isLessOrEqual函数,在不使用任何关系运算符的情况下,判断x <= y是否成立,成立则返回1,否则返回0
函数原型为:int isLessOrEqual(int x, int y);
例如:isLessOrEqual(4, 5) = 1
main函数已经写好,请根据main函数的内容完成该函数的设计:
int main(){
int x,y;
scanf("%d%d",&x,&y);
printf("%d\n",isLessOrEqual(x,y));
return 0;
}
函数:
int isLessOrEqual(int x, int y){
int a=((y-x)>>7)+1;
return a;
}
3.isPositive函数*
定义一个函数,在不使用任何关系运算符的情况下,对参数x的符号进行判断,如果大于0则返回1,否则返回1
函数原型为:int isPositive(int x);
例如:isPositive(-1) = 0
main函数已经写好了,请根据main函数的内容完成该函数的设计:
int main(){
int x;
scanf("%d",&x);
printf("%d\n",isPositive(x));
return 0;
}
函数:
int isPositive(int x){
int a=(x-1)>>7;
return a+1;
}
4.bitAnd函数*
设计一个bitAnd函数,在不使用按位与运算符&的情况下,实现按位与运算,可以使用按位取反~和按位或|
函数原型为:int bitAnd(int x, int y);
例如:bitAnd(6, 5) = 4
main函数已经写好了,请根据main函数的内容完成该函数的设计:
int main(){
int x,y;
scanf("%d%d",&x,&y);
printf("%d\n",bitAnd(x,y));
return 0;
}
函数:
int bitAnd(int x, int y)
{
int temp=~(~x|~y);
return temp;
}
5.negate函数*
设计一个函数,在不使用负号的情况下,返回-x
函数原型为:int negate(int x);
例如:negate(1) = -1
main函数已经写好了,请根据main函数的内容完成该类的设计:
int main(){
int x;
scanf("%d",&x);
printf("%d\n",negate(x));
return 0;
}
函数:
int negate(int x){
return ~x+1;
}
int main(){
int x;
scanf("%d",&x);
printf("%d\n",negate(x));
return 0;
}
6.bang函数*
定义一个函数,在不使用逻辑非运算符!的情况下,用于求!x
函数原型为:int bang(int x);
例如:bang(5) = 0, bang(0) = 1
main函数已经写好了,请根据main函数的内容完成该函数的设计:
int main(){
int x;
scanf("%d",&x);
printf("%d\n",bang(x));
return 0;
}
函数:
int bang(int x)
{
//int tmpx = x & ( (~x) >> 1);
int tmpx = x | ( (~x)+1);
tmpx = tmpx >> 31;
tmpx = tmpx +1;
return tmpx;
}
7.divpwr2函数*
定义divpwr2函数,在不使用除法运算符的情况下,计算 x/(2^n),0 <= n <= 30,要求向 0 舍入
例如:divpwr2(15, 1) = 7, divpwr2(-33, 4) = -2
main函数已经写好了,请根据main函数的内容完成该函数的设计:
int main(){
int x,n;
scanf("%d%d",&x,&n);
printf("%d\n",divpwr2(x,n));
return 0;
}
函数:
int divpwr2(int x, int n)
{
int tmp = (~( (x >> 31) & 0x1) )+1 ;
int q= ~((~0)<<n);
int ans = (x + (tmp & q) ) >> n ;
return ans;
}
8.showIP函数
设计一个函数,该函数将给定的任意整型数据视为一个IPv4地址,并以点分十进制形式显示该IP地址。
例如:整数为-1455049865(十六进制表示为0xA945B377),对应的IP地址为:169.69.179.119。
函数原型为:void showIP(int x);
main函数已经写好了,请根据main函数的内容完成该函数的设计:
int main(){
int x;
scanf("%d",&x);
showIP(x);
return 0;
}
函数:
void showIP(int x){
int b,i,c=0,d,a=1,e;
for(i=31;i>=0;i--){
b=(x>>i)&1;
if(b==1){
d=(a<<(i%8));
e=(d^e);}
if(i%8==0){
printf("%d",e);
e=0;
if(i!=0)
printf("."); }
}
}
9.fitsBits函数
设计一个函数,用于测试参数x是否能被n位补码整数表示(1 <= n <= 32)。如果能返回1,否则返回0
函数原型为:int fitsBits(int x, int n);
例如: fitsBits(5, 3) = 0, fitsBits(-4, 3) = 1
main函数已经写好了,请根据main函数内容完成该函数的设计:
int main(){
int x,n;
scanf("%d%d",&x,&n);
printf("%d\n",fitsBits(x,n));
return 0;
}
函数:
int fitsBits(int x, int n)
{
int tmp = ~((~n)+1);
int tmpx = x >> tmp;
int ans = ( !tmpx | !(tmpx+1) );
return ans;
}
10.umax函数
设计一个函数,返回长度为n位(1<=n<=32)的无符号整数能表示的最大值。
函数原型为:unsigned umax(int n);
例如: umax(3)=7,umax(6)=63;
main函数已经写好了,请根据main函数内容完成该函数的设计:
int main(){
int n;
scanf("%d",&n);
printf("%u\n",umax(n));
return 0;
}
函数:
unsigned umax(int n){
int a=1;
for(int i=0;i<n;i++){
a=2*a;
}
return a-1;
}
11.tmax函数
设计一个函数,返回长度为n位(2<=n<=32)的有符号整数能表示的最大正数。
函数原型为:int tmax(int n);
例如: tmax(3)=3,tmax(6)=31;
main函数已经写好了,请根据main函数内容完成该函数的设计:
int main(){
int n;
scanf("%d",&n);
printf("%d\n",tmax(n));
return 0;
}
函数:
int tmax(int n){
int a=1;
for(int i=0;i<n-1;i++){
a=2*a;
}
return a-1;
}