File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -813,6 +813,12 @@ fn test_bitwise_ops() {
813813 assert b.bitwise_or (b) == b
814814 assert b.bitwise_and (b) == b
815815 assert b.bitwise_not () == big.zero_int
816+ assert big.three_int.neg ().bitwise_com () == big.two_int
817+ assert big.two_int.neg ().bitwise_com () == big.one_int
818+ assert big.one_int.neg ().bitwise_com () == big.zero_int
819+ assert big.zero_int.bitwise_com () == big.one_int.neg ()
820+ assert big.one_int.bitwise_com () == big.two_int.neg ()
821+ assert big.two_int.bitwise_com () == big.three_int.neg ()
816822}
817823
818824fn test_get_bit () {
Original file line number Diff line number Diff line change @@ -743,6 +743,17 @@ pub fn (a Integer) bitwise_not() Integer {
743743 }
744744}
745745
746+ // bitwise_com returns "bitwise complement" of integer `a`.
747+ //
748+ // Note: this function consider the sign of the input.
749+ pub fn (a Integer) bitwise_com () Integer {
750+ return if a.signum == - 1 {
751+ a.abs () - one_int
752+ } else {
753+ (a + one_int).neg ()
754+ }
755+ }
756+
746757// bitwise_xor returns the "bitwise exclusive or" of the integers `|a|` and `|b|`.
747758//
748759// Note: both operands are treated as absolute values.
You can’t perform that action at this time.
0 commit comments