gpt4 book ai didi

c - int的未知系统位大小,如何创建掩码

转载 作者:行者123 更新时间:2023-12-04 00:12:54 25 4
gpt4 key购买 nike

我想只为 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 位系统

  1. ~0 给 FFFF
  2. ~0>>1 给 7FFF
  3. ~(~0 >> 1) 给 8000

最佳答案

您应该添加一个 u 后缀以使移位的内容无符号,以便执行逻辑右移而不是算术右移。

const int unsigned mask = ~(~0u>>1);

关于c - int的未知系统位大小,如何创建掩码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67092634/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com