c - 为什么 0x1 被解释为小于 0xC0000000?
问题描述
我正在学习整数的二进制表示,并尝试编写一个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;
}
解决方案
推荐阅读
- jquery - 如果用户忽略通知,则删除类
- excel - 自动过滤器 - 将运算符动态链接到单元格
- ansible-inventory - 如何让 awx 使用 azure_rm.yml 而不是 ini 版本?
- angular - ngb timepicker 覆盖字段集 css 样式
- python - 手动启动 DAG 会跳过下一次计划运行吗?
- html - 如何定位一个元素,就好像它是相对的但有属性就好像它是绝对的?
- python - 一旦设置为null,如何在Django模型中使用默认值?
- xamarin.forms - Xamarin ObservableCollection ListView 不刷新
- flutter - Flutter 将变量发送到其他类
- windows - 如何处理在批处理文件上运行命令时出现的错误