Да нет, всё верно, у вас 767 и должен получаться, судя по вашему коду.
8 * 8 * 8 = 512
512 + byte(0 - 1) = 512 + 255 = 767
давайте я вам переведу ваш код в Си для наглядности
int Calculation(short value) {
if (value % 2 == 1) {
char value_l = (char)value; // use only lower 8 bit
return value_l * value_l;
} else {
char value_l = (char)value; // use only lower 8 bit
short first_mul = value_l * value_l;
char mul_l = (char)first_mul; // use only lower 8 bit of result
short second_mul = mul_l * value_l;
second_mul = (second_mul & 0xFF00) + (char)second_mul - 1; // subtract 1 only from lower 8 bits
return second_mul;
}
}