This is not a bug. $not() (as well as $or(), $and() etc) accepts decimal values, not binary. You need to use $base() to convert 110 to decimal and then use it as input to $not(). Also note that a number that's to be NOT'd is considered 32-bit. For example, 5 in binary is:
00000000000000000000000000000101
$not(5) is 4294967290, which, in binary, is:
11111111111111111111111111111010
by comparing the above two binary numbers, it's easy to conclude that $not() works as expected.
If I understood what you want to do, it's easy to make an alias for this:
alias notreally return $base($xor($base($1,2,10),$calc(2^ $len($1) -1)),10,2,$len($1))
Edit: looks like I was a bit late. While I was previewing my post, theRat sneaked in with a very clever solution that does the same thing.