Short answer: performance.
Long answer:
The basic "binary" system doesn't have anything built in to represent negative numbers, it consists of only 0's and 1's. The question is: how do we represent negative numbers using only 0's and 1's?
The standard answer is to use the two's-complement format. A simple example for a 3-bit binary system: 000 means 0, 011 means 3, 111 means -1 (makes sense as when you substract 1 from 0, you want -1), 100 means -3. If you add 1 to 011 or 3, you get 111 or -3.
Now, why doesn't that cause an overflow exception? Two reasons:
Exception itself is a relatively new concept and it was too late to change the binary system the computing hardware world uses.
Condition checking and throwing exception is an overhead that has a performance cost. If we want high performance, these are often unnecessary. There is performance gain if there is no explicit checking done for any overflow exception.
val bcase isn't an exception—it happens at compile-time, not runtime. Having the compiler reject invalid literals is cheap, runtime checking for overflows is expensive.