Я изучаю двоичное представление целых чисел и попытался написать функцию, которая возвращает int
, умноженное на 2, используя насыщенность. Мысленный процесс заключается в том, что если значение положительно переполняется, функция возвращает INT_MAX
, и наоборот, если оно отрицательно переполняется, возвращается INT_MIN
. Во всех других случаях двоичное значение смещается влево на 1.
. Мне интересно, почему мне нужно привести значение 0xC0000000
как int
, чтобы моя функция работала правильно, когда Я передаю аргумент x = 1
.
Вот моя функция:
int timestwo (int x){
if(x >= 0x40000000) // INT_MAX/2 + 1
return 0x7fffffff; // INT_MAX
else if(x < (int) 0xC0000000) // INT_MIN/2
return 0x80000000; // INT_MIN
else
return x << 1;
return 0;
}