char类型按位操作失败到int

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了char类型按位操作失败到int相关的知识,希望对你有一定的参考价值。

我尝试在C中按位操作。这是我的代码:

int main() {
    char c = 127;
    c <<= 1;
    if (c == 0xfe) {
        printf("yes");
    }
    else {
        printf("No");
    }
    return 0;
}

系统控制台打印否。我希望收到的是是。位移后c中的值为ffffffffe。似乎系统已经将8位改为32位。谁能帮我。

答案

你已经正确地找出了低位字节的内容,即0xfe。然而,在这里发生的事情还有更多:当你写作时

if (c == 0xfe) {
    ...
}

你正在将ccharint常数0xfe进行比较。在这种情况下,C规则要求将char c推广到int进行比较。由于char在您的平台上签名,0xfe被提升为0xfffffffe,这就是比较随后失败的原因。

如果你想在char类型中进行比较,请将0xfe投射到char,如下所示:

if (c == (char)0xfe) {
    ...
}

Demo 1.

另一方面,无符号字符会给你int促销没有麻烦,因为它们非常适合int

unsigned char c = 127;
c<<=1;
if (c == 0xfe) { // No casting is necessary
    ...
}

Demo 2.

注意:由于c <<= 1溢出,char的行为是实现定义的。

以上是关于char类型按位操作失败到int的主要内容,如果未能解决你的问题,请参考以下文章

Java的按位操作符

为啥我的 ASCII char 到 int 转换失败?

请问一些关于char类型数据转换成16进制的问题!! 以及移位操作符~ 拜托了~~~~~

JAVA 各种数值类型最大值和最小值 Int, short, char, long, float,&nbs

char到int的转换

JAVA 按位运算符的解释