The humble `integer` type is both an example of how metaphor is *everywhere* in programming and the danger of that fact.
The integer type is a metaphor that links together a fixed-size computer word and a mathematical structure. It's unusual in that that metaphor's Target Domain is more concrete than its Source Domain which is, after all, an imaginary construct that can't actually exist in a finite universe. But I don't think that affects reasoning: after all, both domains exist as impulses in the brain.
Here's a picture:

(Double-click to enlarge)
The picture on the left is the Target Domain (in this case, machine words). The one on the right is the Source Domain (mathematical integers). The boxes represent collections of facts, such as facts about addition. Those facts are *different* for the two kinds of integers – in this case, that overflow and underflow are possible in the target domain.
The hypothesis of Metaphorical Reasoning is that reasoning is primarily done in the source domain and the results are mapped over to the target domain.
Because the target domain has no notion of boundaries to integers, reasoning doesn't take that into account unless it gets a jolt. (Perhaps being bitten by overflows often enough that the brain does the equivalent of pinning a note to the target Integer, saying "don't forget about overflow."
--- An alternative is to consider this as an Extra Source Element, where the solution is the unbounded integer (bignums).
See also Bit Field Discomfort, which may have to do with Constant Shifting of Metaphors.