From fbbe586d25b1ebaf66fe2e92e1986bb5debf961d Mon Sep 17 00:00:00 2001 From: Syndamia Date: Thu, 19 Oct 2023 19:40:08 +0300 Subject: [w2] Added solutions --- week02/exercise02.cpp | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 week02/exercise02.cpp (limited to 'week02/exercise02.cpp') diff --git a/week02/exercise02.cpp b/week02/exercise02.cpp new file mode 100644 index 0000000..7589576 --- /dev/null +++ b/week02/exercise02.cpp @@ -0,0 +1,20 @@ +#include + +int main() { + unsigned int n; + std::cin >> n; + // Чрез побитовото и (&) можем лесно да направим "филтър", ако бита в дясно е единица приемаме бита в ляво, иначе връщаме 0. + // От неговата дефиниция, ако имаме някакъв входен бит X, тогава X & 1 винаги ще връща X + // С примери: ако X=0, тогава 0 & 1 = 0; ако X=1, тогава 1 & 1 = 1 + // Обаче X & 0 винаги връща0 + // С примери: ако X=0, то 0 & 0 = 0; ако X = 1, то 1 & 0 = 0 + // Понеже не правим "сметкаджийска" операция, а повече използваме & за филтър, общоприето е да наричаме бита след & "маска". + // + // Тоест, да вземем най-десните 6 бита, означава да занулим останалите, тоест ще ползваме &, като в нашата маска + // трябва при най-десните 6 бита да са 1, докато останалите да са 0 + // + // Най-десните 6 бита съответстват на 2^5, 2^4, 2^3, 2^2, 2^1 и 2^0 + // Тоест, търсената маска е сумата на тези степени, което като го сметнем, излиза 31 + // Има и по-лесен начин да го изчислим, като забележим, че тази сума е равна на 2^6 - 1 + std::cout << (n & 31) << std::endl; +} -- cgit v1.2.3