With sufficiently large intA * intB result, this overflows at the 2^31 boundary and you unsurprisingly do not get the intended result.
int64_t value = (intA * intB) - int64A
This, however, produces the expected value.
int value = (intA * intB) - int64A
What's going on at the low level that means that the same (bad) operation stored in an int does the right thing but in an int64_t it does not?