Website Summary Files Commits Branches @commit @diff @stats
path: root / Sem. 05 / Task 3.cpp
diff options
context:
space:
mode:
Commit7881119e0914b9207568918fcf868eea84ef3d78 (patch)
Author
 Angeld55 <angel_dimitriev@abv.bg>
2020-11-28 01:45:44 +0200
Committer
 Angeld55 <angel_dimitriev@abv.bg>
2020-11-28 01:45:44 +0200
Filesab70701506971ec44b9aab9ba00ad9525b8da0e5 /Sem. 05/Task 3.cpp
Introduction_to_programming_FMI-7881119e0914b9207568918fcf868eea84ef3d78.tar
Introduction_to_programming_FMI-7881119e0914b9207568918fcf868eea84ef3d78.tar.gz
Introduction_to_programming_FMI-7881119e0914b9207568918fcf868eea84ef3d78.zip
Parente5646c51794632f5816c00f4d1e7933ea7dcbbc0 (diff)
sem 8
1 files changed, 27 insertions, 0 deletions
-rw-r--r--Sem. 05/Task 3.cpp27
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 <iostream>
+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