#!/usr/bin/perl
use common::sense; # https://perlmonks.org/?node_id=11107846
my $a = 0;
my $b = 0;
$a |= 1 << 0;
$a |= 1 << 1;
$b |= 1 << 1;
$b |= 1 << 2;
my $i = $a & $b;
my $u = $a | $b;
my $i_cnt = unpack '%32b*', pack 'N', $i;
my $u_cnt = unpack '%32b*', pack 'N', $u;
printf "a is %#032b %d\n", $a, $a;
printf "b is %#032b %d\n", $b, $b;
printf "intersection is %#032b %d\n", $i, $i;
printf "union is %#032b %d\n", $u, $u;
say "set bit count in intersection: $i_cnt";
say "set bit count in union: $u_cnt";
Gives your expected result.