Выполнить операцию 759 + 674, забыв о переносе. В результате получится 323
Download 19,17 Kb.
|
3 задачи
Чтобы просуммировать 759 + 674, я обычно складываю digit[0] обоих чисел, переношу единицу, затем перехожу к digit[1], переношу и т.д. Точно так же можно работать с битами: просуммировать все разряды и при необходимости сделать переносы единиц. Можно ли упростить алгоритм? Да! Допустим, я хочу разделить «суммирование» и «перенос». Мне придется проделать следующее:
Теперь вернемся к двоичной системе.
759 + 674 ni jamlash uchun men odatda ikkala raqamning [0] raqamini qo'shaman, birini o'tkazaman, so'ngra [1] raqamiga o'taman, o'tkazaman va hokazo. Bitlar bilan xuddi shunday ishlashingiz mumkin: barcha bitlarni jamlang va agar kerak bo'lsa, birliklarni o'tkazing. Algoritmni soddalashtirish mumkinmi? Ha! Aytaylik, men "sum" va "tashish" ni ajratmoqchiman. Men quyidagilarni qilishim kerak: 1. O'tkazishni unutib, 759 + 674 operatsiyasini bajaring. Natijada 323 bo'ladi. 2. 759 + 674 operatsiyasini bajaring, lekin faqat o'tkazmalarni bajaring (raqamlarni yig'masdan). Natijada 1110 bo'ladi. 3. Endi siz dastlabki ikkita operatsiya natijalarini qo'shishingiz kerak (1 va 2-bosqichlarda tasvirlangan bir xil mexanizm yordamida): 1110 + 323 = 1433. Endi ikkilik tizimga qaytaylik. 1. Agar siz ikkilik sonlar juftligini tashuvchi belgisini hisobga olmagan holda jamlasangiz, a va b sonlarning i-e bitlari mos kelgan taqdirdagina (ikkalasi ham 0 yoki 1 qiymatga ega bo‘lgan) i-jamlangan bit nolga teng bo‘lishi mumkin. Bu klassik XOR operatsiyasi. 2. Agar siz bir juft raqamlarni qo'shsangiz, faqat ko'chirishni amalga oshirsangiz, yig'indining i-bitiga 1-qiymati, agar ikkala raqamning (a va b) i-1-bitlari 1 qiymatiga ega bo'lsagina beriladi. ofset bilan AND operatsiyasidir. 3. Hech qanday transferlar qolmaguncha ushbu amallarni takrorlashingiz kerak. public static int add(int a, int b) { if (b == 0) return a; int sum = a ^ b; // добавляем без переноса int carry = (a & b) << 1; // перенос без суммирования return add(sum, carry); // рекурсия } Download 19,17 Kb. Do'stlaringiz bilan baham: |
Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2025
ma'muriyatiga murojaat qiling
ma'muriyatiga murojaat qiling