aboutsummaryrefslogtreecommitdiff
path: root/week02/exercise04.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'week02/exercise04.cpp')
-rw-r--r--week02/exercise04.cpp18
1 files changed, 18 insertions, 0 deletions
diff --git a/week02/exercise04.cpp b/week02/exercise04.cpp
new file mode 100644
index 0000000..2e83fbb
--- /dev/null
+++ b/week02/exercise04.cpp
@@ -0,0 +1,18 @@
+#include <iostream>
+
+int main() {
+ unsigned int address;
+ std::cin >> address;
+ // Искаме най-левите 8 бита, означава че искаме да "издръпнем" десните 32-8=24 бита
+ int firstOctet = (address >> 24);
+ // Искаме вторите най-леви 8 бита, така че издръпваме най-левите 16 бита (32-16=16)
+ // и от тези 16 бита използваме маска, за да вземем най-десните 8
+ // Маската ни десетично е 2^7 + 2^6 + 2^5 + 2^4 + 2^3 + 2^2 + 2^1 + 2^0
+ // За подробности с маски, вижте решението на 2ра задача
+ int secondOctet = (address >> 16) & 255;
+ // Същата идея, искаме третите най-леви 8 бита, така че дръпваме отдясно битвоте, така че
+ // търсените битове да са в най-дясно и с маска премахваме всичко освен тези 8 бита
+ int thirdOctet = (address >> 8) & 255;
+ int fourthOctet = address & 255;
+ std::cout << firstOctet << '.' << secondOctet << '.' << thirdOctet << '.' << fourthOctet << std::endl;
+}