c - int的未知系统位大小,如何创建掩码
问题描述
我只想为 MSB 创建一个掩码,但是操作系统上的 int 的宽度应该是未知的,所以你不能假设 32 位。
见下文
// THE FOLLOWING FAILS BECAUSE OF SYSTEM IMPLEMENTING A LOGICAL
// RIGHT SHIFT
// Idea is
// 1. 0 inverted = all 1's
// 2. Arithmetic shift right
// 3. Then invert again to preseve MSB '1'
const int unsigned mask = ~(~0>>1); // FAIL, because of logic shift
假设 16 位系统
- ~0 给 FFFF
- ~0>>1 给 7FFF
- ~(~0 >> 1) 给 8000
解决方案
您应该添加一个u
后缀以使移位的内容无符号,以便执行逻辑右移而不是算术右移。
const int unsigned mask = ~(~0u>>1);
推荐阅读
- ios - 添加 firebase_messaging 包后 Flutter 应用程序无法运行
- node.js - 实体之间的循环依赖
- python - 如何将网站内容转换为 CSV(python)?
- azure - Azure vnet 非传递路由和 NVA
- hapi - 自动创建 HAPI FHIR 分区
- javascript - 防止重定向 PHP 表单
- php - 每天在 Woocommerce 中按产品 ID 获取订单数
- javascript - Javascript:根据另一个对象数组对对象数组进行排序
- python - 按两个键后如何关闭脚本?
- maven - Sakai 20.x 在 sakai-portal-api 中部署失败