【问题标题】:Bitwise operation producing unexpected output [closed]产生意外输出的按位运算[关闭]
【发布时间】:2015-07-27 20:17:14
【问题描述】:
#include<stdio.h>
int main(void)
{
    int a=0x11;
    printf("\n %d",a);
    int b=10;
    int c=(a&b);
    printf("\t %d",c);
    return 0;
}

这个程序的o/p是

17 0

但我希望程序对位进行操作,从而导致

17 16

为什么输出是0?

【问题讨论】:

  • 什么是o/p?输出?
  • 你的意思是int b=0x10;

标签: c bitwise-operators bitwise-and


【解决方案1】:

在您的情况下,b 的十进制值是 10,而不是 十六进制 10。更改

 int b=10;

 int b=0x10;

【讨论】:

    【解决方案2】:

    在二进制符号中0x11

    0001 0001
    

    10

    0000 1010
    

    如您所见,这些值没有共同的1 位。因此,这些值之间的按位与运算的结果是0。你为什么期望它产生16

    【讨论】:

    • 我认为你的意思是“按位与”,但你显然是对的:)
    • 谢谢。虽然按位运算编译器总是将任何类型的 no 转换为二进制。我说得对吗?先生?这是我关心的问题
    • @Debashish Saha" “转换为二进制”是一种错误的思考方式。按位运算工作就好像它们对二进制进行运算数字的表示。编译器如何实现它是它自己的内部事务。也许它会“转换为二进制”,也许不会。(也许一切都已经是二进制的。)大多数时候编译器将简单地使用实现的 CPU 指令相同的按位运算。该 CPU 指令如何在内部工作 - “没人知道”。从语言的角度来看,它很神奇。
    猜你喜欢
    • 1970-01-01
    • 2021-03-22
    • 2021-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-21
    • 2019-11-02
    相关资源
    最近更新 更多