По битовому алгоритму И давая мне фанковые результаты

Я пишу небольшой сценарий на perl, чтобы сравнить два IP-адреса, используя битовый оператор AND. но я получаю очень странные результаты. Я новичок в perl, так что, может быть, кто-нибудь может дать мне несколько указателей.

Heres мой маленький сценарий:

#!/usr/bin/perl

$address = "172.34.12.0";
$address2 = "255.255.255.0";

@octets = split (/\./,$address);
@octets2 = split (/\./,$address2);

#Funky results when doing a bitwise AND
#This outputs "050 24 00 0" What's going on here?
print $octets[0] & $octets2[0], "\n";
print $octets[1] & $octets2[1], "\n";
print $octets[2] & $octets2[2], "\n";
print $octets[3] & $octets2[3], "\n";

#Results are what I want when doing it as literals
#This outputs "172 34 12 0"
print 172 & 255, "\n";
print 34 & 255, "\n";
print 12 & 255, "\n";
print 0 & 0, "\n";

Кто-нибудь знает, почему или как я получил "050 24 00 0" при выполнении битовой И на $octets и $octets2 членов? Все, кажется, работает просто отлично, когда я делаю понемногу И с помощью букв. Пожалуйста, помогите. Спасибо!

8
задан Sam 19 September 2011 в 12:20
поделиться