Liczenie adresu broadcastowego na podstawie maski ip

0

Witam.
Mam problem.
Załóżmy, że mamy 2 tablice 4 elementowe, odpowiednio tab i tab2.
W kazdym z elementow tab znajduje sie jeden z elementow adresu IP.
W kazdym z elementow tab2 znajduje sie jeden z elementow maski

Chcę obliczyc adres sieci i broadcast
Adres sieci, liczymy alternatywa bitowa maski i ip
Pytanie.
Załóżmy że w tab i tab 2 mamy liczby calkowite w systemie dziesiętnym. Czy wykonana na nich alternatywa bitowa będzie poprawna, czy trzeba zamieniac te liczby na system binarny.

Broadcast mogę obliczyc mając adres sieci i maske
broadcast = adres sieci | ~maska

Nie wiem dlaczego, ale liczone alternatywy itp są liczbami ujemnymi :/
Wie ktoś gdzie problem?

0

przerób liczby na typ unsigned i zadziała :P
albo bitowo :

#include <cstdlib>
#include <iostream>

using namespace std;

typedef union 
{
      unsigned char Oktety[4];
      unsigned int IP;
} TIP;


void Wczytaj(TIP&IP)
{
     int Oktet;
     for (char i = 0 ; i < 4 ;i++)
     {
     scanf("%d",&Oktet);
     IP.Oktety[i] = (unsigned char ) Oktet;
     }
}

void Wypisz(TIP&IP)
{
     int Oktet;
     for (char i = 0 ; i < 4 ;i++)
     printf ("%d.",IP.Oktety[i]);
}
int main(int argc, char *argv[])
{
    TIP IP , MASKA,BROADCAST;
    printf ("podaj ip sieci : " );
    Wczytaj(IP);
    printf ("podaj maske : ");
    Wczytaj(MASKA);
    BROADCAST.IP = IP.IP | ~MASKA.IP;
    printf ("Broadcast sieci to : ");
    Wypisz(BROADCAST);
    system("PAUSE");
    return EXIT_SUCCESS;
}
0

A jak za pomocą stworzonych unii obliczyć pierwszy i ostatni adres IP w sieci, oraz ilość dostępnych adresów.

Twój sposób elegancko oblicza broadcast. W moim zaś zamiana na unsigned nie pomaga, byc może liczę coś źle.

Fragment kodu

unsigned int  tab[4];
    unsigned int tab2[4];
    unsigned int tabb[4];
    unsigned int tabb2[4];
.
.
.


for(int i = 0;i< 4;i++)
        {
            tabb[i] = tab[i] & tab2[i];  // adres sieci
            tabb2[i] = tab[i] | ~tab2[i]; // maska

        }
        cout<<tabb[0]<<"."<<tabb[1]<<"."<<tabb[2]<<"."<<tabb[3]<<" "<<tabb2[0]<<"."<<tabb[1]<<"."<<tabb[2]<<"."<<tabb[3]<<"\n";
 // wiem, moglem w petli, ale juz mi sie nie chcialo ;d

1 użytkowników online, w tym zalogowanych: 0, gości: 1