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