C 按位或返回 "f"

标签 c bitwise-or

我正在做一个非常琐碎的计算机科学家庭作业,围绕 C 中的按位运算符,但我遇到了一个问题,我不知道为什么会发生这种情况。这是我正在运行的代码。

    #include <stdio.h>

int main(int argc, char *argv[]){
    int bitPattern1 = 0x10011001;
    int bitPattern2 = 0x01100110;
    int bitPattern3 = 0xFFFFFFFF;
    int bitPattern4 = 0x00000000;

    /* pair 1 */
    printf("bitPattern1 &  bitPattern2 = %x\n", bitPattern1 &  bitPattern2);
    printf("bitPattern1 && bitPattern2 = %x\n", bitPattern1 && bitPattern2);

    /* pair 2 */
    printf("bitPattern1 |  bitPattern2 = %x\n", bitPattern1 |  bitPattern2);
    printf("bitPattern1 || bitPattern2 = %x\n", bitPattern1 || bitPattern2);

    /* pair 3 */
    printf("bitPattern1 &  bitPattern3 = %x\n", bitPattern1 &  bitPattern3);
    printf("bitPattern1 && bitPattern3 = %x\n", bitPattern1 && bitPattern3);

    /* pair 4 */
    printf("bitPattern1 |  bitPattern3 = %x\n", bitPattern1 |  bitPattern3);
    printf("bitPattern1 || bitPattern3 = %x\n", bitPattern1 || bitPattern3);

    /* pair 5 */
    printf("bitPattern2 &  bitPattern4 = %x\n", bitPattern2 &  bitPattern4);
    printf("bitPattern2 && bitPattern4 = %x\n", bitPattern2 && bitPattern4);

    /* pair 6 */
    printf("bitPattern2 |  bitPattern4 = %x\n", bitPattern2 |  bitPattern4);
    printf("bitPattern2 || bitPattern4 = %x\n", bitPattern2 || bitPattern4);

    return 0;
} 

问题发生在第 4 对的第一部分,它返回以下结果:

bitPattern1 |  bitPattern3 = ffffffff
bitPattern1 || bitPattern3 = 1

为什么按位运算符返回“f”我查阅了文档,并且我认为 OR 运算符返回 1 或零,似乎该示例应该返回“11111111”。与十六进制数有关吗?我在 google 上找不到任何信息。

最佳答案

首先,OR 的输入为十六进制表示法的 FFFFFFFF,这意味着以二进制(按位)形式表示为 11111111111111111111111111111111。 IE。它比您引用的 1 多得多(确切地说是 32 位)。

其次,所讨论的按位或确实应该以二进制表示法返回1111111...1。这正是它返回的结果。但是,当您以十六进制表示法打印结果时,您会得到FFFFFFFF。您通过在 printf 中使用 x 格式说明符明确请求十六进制表示法。

不幸的是,printf没有用于生成二进制表示法的格式说明符。然而,将十六进制转换为二进制是一项微不足道的任务,因为它是用四个二进制数字直接替换每个十六进制数字。 F 代表 1111,因此如您所见,按位计算,您的 OR 确实产生了 11111111111111111111111111111111,正如它应该的那样。

关于C 按位或返回 "f",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21293497/

相关文章:

c - Glib:创建 GDBusProxy 时内存泄漏

cmake ctest生成

sql-server - 怎么不| (按位或)在 SQL Server/SSIS 2012 中工作吗?

java - "| "运算符的特殊用法,如 catch (NullPointerException | NumberFormatException e)

用于调用函数的 Python 管道符

c - free 在分配的结构数组上导致段错误

c - 如何使用 IF..Statement 使此代码免受缓冲区溢出的影响

cvSet() 如何使用该函数仅将颜色设置为像素