不使用按位运算符,实现或"|",与"&",左移位""二进制运算

int test(int num1,int step){//左移位

num1 = num1 + pow(2,step);

}

int test(int num1){//右移位

//这是移一位的时候

num1 = (num1 - (num1%2))/2;

}

int test(int num1,int step){

//移位取每一位,判断0-1

int a=1,b=0;

while(a<=step){
b=num1>>(a-1)&1;

a++;

}

}



int test1(int num1,int num2){//或(只要有一个1就为1)

int mod1 = 0;
int mod2 = 0;
int ret = 0;
int backSum = 1;
while (num1 > 0 && num2 > 0)
{
//当前位(十进制转二进制)
mod1 = num1 % 2;

mod2 = num2 % 2;

//只要有一位是1,那这个位置就是1

if (mod1 > 0 || mod2 > 0){
ret = ret + backSum;

}

//右移一位确定当前位,既上一位(十进制转二进制)

num1 = (num1 - mod1) / 2;
num2 = (num2 - mod2) / 2;
//移位以后,位的值,移n为,值 = 2的n次幂
backSum = backSum * 2;
}
//因为最后肯定有一个是0,但是可能会有一个1存在,譬如:(011 或 101),所以这个1是backSum大小的值,加上之前合起来的值,才是最后或的值
num1 = (num1 + num2)*backSum;
ret = ret + num1;

return ret;
}


int test2(int num1, int num2){//与(都是1的时候才为1)
int mod1 = 0;
int mod2 = 0;
int ret = 0;
int backSum = 1;
while (num1 > 0 && num2 > 0)
{
//当前位(十进制转二进制)
mod1 = num1 % 2;

mod2 = num2 % 2;

//只要有一位是1,那这个位置就是1,这个与‘或’不同

if (mod1 > 0 && mod2 > 0){
ret = ret + backSum;

}

//右移一位确定当前位,(十进制转二进制)

num1 = (num1 - mod1) / 2;
num2 = (num2 - mod2) / 2;
//移位以后,位的值,移n为,值 = 2的n次幂
backSum = backSum * 2;
}
return ret;

}



终于搞明白为什么这么写了!注释写的不是很明白的话,留言我吧!主要自己要搞懂,就是移位问题和十进制转二进制的问题

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章