当前位置:网站首页>[Niuke classic question 01] bit operation

[Niuke classic question 01] bit operation

2022-07-07 00:49:00 RookieStriver

JZ65 Do not add, subtract, multiply or divide

describe :

Write a function , Find the sum of two integers , It is required that... Should not be used in the function body +、-、*、/ Four operation symbols .
Data range : Both numbers satisfy -10 \le n \le 1000−10≤n≤1000
Advanced : Spatial complexity O(1)O(1), Time complexity O(1)O(1)

Example 1:
Input :1,2
Return value :3

Example 2:
Input :0,0
Return value :0

Algorithm ideas :
Decimal addition thought : 5+7=12, Three steps
First step : Add the values of each , It's not a carry , obtain 2.
The second step : Calculate the carry value , obtain 10. If the carry value of this step is 0, So the value of the first step is the final result .
The third step : Repeat the above two steps , Only the added value becomes the result of the above two steps 2 and 10, obtain 12.

Binary addition thought : Same as decimal , First calculate the addition result without considering carry (0+0 have to 0,1+1 Carried 0,1+0 have to 1), Use XOR to get ; Then calculate the carry result of the addition ( Same as 1 Move the position of the left one bit ), Use phase and shift back left to get .

 Insert picture description here
Sample code :

int Add(int num1, int num2)
{
    
	while (num2 != 0)// Carry is not 0 Continue to add with the addition result 
	{
    
		int sum = num1 ^ num2;// Get the data of each addition regardless of carry 
		int temp = (num1 & num2) << 1;	// Adding the same bits will carry 
		num1 = sum;
		num2 = temp;
	}
	return num1;
}
int main()
{
    
	int num1 = 0, num2 = 0;
	scanf("%d%d", &num1, &num2);
	int ret = Add(num1, num2);
	printf("%d\n", ret);
	system("pause");
	return 0;
}
原网站

版权声明
本文为[RookieStriver]所创,转载请带上原文链接,感谢
https://yzsam.com/2022/02/202202130943264891.html