微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

字符中的按位运算

如何解决字符中的按位运算

我对 C 的按位运算符在字符上的行为很好奇。

#include <stdio.h>

int main()
{
    int x = 108;
    x = x<<1;
    printf("%d\n",x);
    char y = 108;
    y = y<<1;
    printf("%d",y);
    //printf("%d",y<<1);

    return 0;
}

在这里,如果我像这样传递,y = y-40 并且当我直接打印它时,

printf("%d",y

它的输出216

我如何模拟它?

解决方法

y<<1 产生一个 int。要获得 -40,您将其隐式转换为 char。在您的 printf 情况下,您需要明确进行强制转换:(char)(y<<1)

,

请注意,在 << 类型上确实没有 char 操作 - << 的操作数被提升为(至少)int 类型,结果是,类似地,int

因此,当您执行 y = y << 1 时,您将操作的 int 结果截断为(有符号的)char,它留下最高有效位(符号bit) 设置,因此它被解释为负值。

但是,当您将 y << 1 直接 传递给 printf 时,结果 int 保持不变。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。