Он переполняется, потому что число отрицательно.
Попробуйте это, и он будет работать:
int n = (int) Long.parseLong("ffff8000", 16);