不使用按位運算符,實現或"|",與"&",左移位""二進制運算

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;

}



終於搞明白爲什麼這麼寫了!註釋寫的不是很明白的話,留言我吧!主要自己要搞懂,就是移位問題和十進制轉二進制的問題

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