Clear[CarryQ] CarryQ[a_Integer, b_Integer] := Length@IntegerDigits@(a b) > Max@(Length@*IntegerDigits /@ {a , b}) SeedRandom[2]; list = RandomInteger[{20}, {5, 2}]~Join~RandomInteger[{1, 10}, {5, 2}] {#1, #2, #1 #2, CarryQ[#1, #2]} & @@@ list // Grid[#, Alignment -> Left] & [![enter image description here][1]][1] --- For the binary case, you can make minor changes given that `IntegerDigits` has an argument for `base` and `len`. If you want to use 2s-complement arithmetic, then you can preferably add more context about the task that requires this calculation. **EDIT** (for the binary case) Let's introduce register length `reg` that I can arbitrarily set at `8` for the default case; although the function takes it as a parameter. If the sum can fit in the assigned register space then no carry is generated. Clear[Base2CarryQ] Base2CarryQ[a_Integer, b_Integer, reg_Integer : 8] := Module[ {abin = IntegerDigits[a, 2, reg] , bbin = IntegerDigits[b, 2, reg] }, Echo[abin]; Echo[bbin]; FromDigits[Echo@IntegerDigits[a b, 2, reg], 2] != a b ] *Usage:* (remove `Echo` statements if not needed) a = 2; b = 128; Base2CarryQ[a, b] (* carry out from the default 8 bit register *) Base2CarryQ[a, b, 9] (* carry out? of a 9-bit register *) [![enter image description here][2]][2] --- [1]: https://i.sstatic.net/asH8M.png [2]: https://i.sstatic.net/xAIcJ.png