2011-08-07 1 views
1

Я понял, как это решение работает.Уточнение при добавлении двух чисел без использования каких-либо арифметических операторов

int add_no_arithm(int a, int b) { 
    if (b == 0) return a; 
    int sum = a^b; // add without carrying 
    int carry = (a & b) << 1; // carry, but don’t add 
    return add_no_arithm(sum, carry); // recurse 
} 

Но автор комментирует над этой проблемой, как:

«Наш первый инстинкт в таких проблем, как это должно быть, что мы будем вынуждены работать с битами Почему? Потому что, когда ты.? отмените знак +, какой у нас другой выбор? Кроме того, так делают компьютеры ».

Что автор пытается сказать?

ответ

3

То, что он имеет в виду, довольно просто - если у вас нет операции +, вам нужно будет воспроизвести поведение на уровне бит целого числа. Код, который вы опубликовали, примерно то же, что и операция +, изначально находится в ALU (алгоритмическая логическая единица, место, где вычисления происходят в CPU).

+0

Спасибо большое –

Смежные вопросы