aboutsummaryrefslogtreecommitdiff
path: root/week02/exercise04.cpp
blob: 2e83fbb36fec89d53cf8c245d8ba694116bf420e (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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;
}