Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <string.h>
- #include <cstdlib>
- int main(){
- char buf[512];
- unsigned long long ipmask;
- unsigned n=(unsigned)strtoul(fgets(buf,512,stdin),0,10);
- while(n-- && fgets(buf,512,stdin)){
- char* p=buf;
- while((p=strtok(p," "))){
- ipmask<<=8;
- ipmask|=strtoul(p,0,10);
- p=0;
- }
- unsigned long ipf=(((unsigned long*)&ipmask)[1]&*((unsigned long*)&ipmask))+1; // +1 na adres sieci
- unsigned long ipl=(((unsigned long*)&ipmask)[1]|(~*((unsigned long*)&ipmask)))-1; // -1 na broadcast
- if(ipl>ipf){ // pierwsze ip ma byc mniejsze od ostatniego w ten sposob zalatwione maski 31 i 32 bity
- fprintf(stdout,"ilosc adresow: %lu\npierwszy adres: %d.%d.%d.%d\nostatni adres: %d.%d.%d.%d\n",(~*((unsigned long*)&ipmask))-1, // mozna jeszcze prosciej policzyc, nie potrzeba logarytmow
- ((unsigned char*)(&ipf))[3],((unsigned char*)(&ipf))[2],((unsigned char*)(&ipf))[1],((unsigned char*)(&ipf))[0],
- ((unsigned char*)(&ipl))[3],((unsigned char*)(&ipl))[2],((unsigned char*)(&ipl))[1],((unsigned char*)(&ipl))[0]);
- }else fprintf(stdout,"ilosc adresow: 0\n");
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement