gpt4 book ai didi

C 位移位

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

我假设 sizeof(char) 是一个字节。然后当我写下面的代码时,

    #include<stdio.h>

int main(void)
{
char x = 10;

printf("%d", x<<5);
}

输出为320

我的问题是,如果 char 是一个字节长,值是 10,它应该是:

0000 1010

当我移动 5 时,它不应该变成:

0100 0001

那么为什么输出是 320 而不是 65?

我在 Linux 上使用 gcc 并检查了 sizeof(char) = 1

最佳答案

在 C 中,所有小于 int 的中间值都会自动提升为 int。因此,您的 char 被提升为大于 8 位。

因此您的 0000 1010 被向上移动 5 位以获得 320。(顶部没有任何移动)

如果要旋转,需要做两类和一个mask:

unsigned char x = 10;

x = (x << 5) | (x >> 3);
x &= 0xff;

printf("%d", x);

使用内联汇编或如果编译器支持它,使用内在函数可以更快地完成它。

关于C 位移位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7543753/

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