qq4*_*qq4 2 c binary hex integer bit-manipulation
我正在学习整数的二进制表示,并尝试编写一个int使用饱和度返回乘以 2的函数。思考过程是,如果值正溢出,函数返回INT_MAX,相反,如果它负溢出,则返回INT_MIN。在所有其他情况下,二进制值左移 1。
我想知道的是为什么我必须将值转换0xC0000000为 anint才能在我传递参数时使我的函数正常工作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;
}
Run Code Online (Sandbox Code Playgroud)