小编Rya*_*sen的帖子

文字常量和具有相同值的变量之间左移的执行差异

我正在编写一个C函数,它接受一个参数n并返回一个int,其位表示为n 1,后跟足够的0来填充数据类型(总共32位).我的代码目前看起来像这样:

int upperBits(int n) {
    int retval = 0 - 1;
    int shift = 32 - n;
    retval = retval << shift;
    return retval;
}
Run Code Online (Sandbox Code Playgroud)

当n = 0时,此代码失败,返回值为-1,由32 1表示,而不是0.但是,我将shift替换为文字:

int upperBits(int n) {
    int retval = 0 - 1;
    int shift = 32 - n;
    retval = retval << 32;
    return retval;
}
Run Code Online (Sandbox Code Playgroud)

代码正常工作,返回0.我使用print语句验证当n = 0调用函数时shift = 32,所以我不明白为什么这些行为不同.造成这种差异的原因是什么,我该如何规避呢?

如果它是相关的,则代码在Linux机器上运行并使用gcc编译.我需要使用只有这些运算符的直线代码:! ˜ & ˆ | + << >>

编辑:我仍然不知道究竟是什么问题,或一个优雅的解决方案,但这种解决方法是有效的:

int upperBits(int n) {
        int retval = 0 - 1;
        int …
Run Code Online (Sandbox Code Playgroud)

c types bit-manipulation

2
推荐指数
1
解决办法
59
查看次数

标签 统计

bit-manipulation ×1

c ×1

types ×1