From 7881119e0914b9207568918fcf868eea84ef3d78 Mon Sep 17 00:00:00 2001 From: Angeld55 Date: Sat, 28 Nov 2020 01:45:44 +0200 Subject: sem 8 --- Sem. 05/Task 3.cpp | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 Sem. 05/Task 3.cpp (limited to 'Sem. 05/Task 3.cpp') diff --git a/Sem. 05/Task 3.cpp b/Sem. 05/Task 3.cpp new file mode 100644 index 0000000..6723ee2 --- /dev/null +++ b/Sem. 05/Task 3.cpp @@ -0,0 +1,27 @@ +#include +using namespace std; + + +//Алгоритъмът за събиране с 1 в двоичен запис: +//От дясно на ляво - правим всички 1-ци на 0, докато не срещнем първата 0. +//Първата 0 я правим на 1. + +// 101001111 + 1 +// 101010000 +int main() +{ + unsigned int n; + cin >> n; + + int mask = 1; //Най-десният бит на маската е 1-ца. Всички други са 0-ли. + + + while ((n & mask) > 0) //Проверяваме дали текущия бит е 1-ца. (при първото влизане, проверяваме най-десния) + { + n ^= mask; // Правим го на 0 ( n = n ^ mask) + mask <<= 1; // Отместваме маската, за да проверим бит-а в ляво. (mask = mask << 1) + } + + //Открили сме първата 0. 1-цата е на точната позиция в маската. + n |= mask; // Правим на 1-цa (n = n | mask) +} \ No newline at end of file -- cgit v1.3.1-23-gd82d