c - 位级操作

扫码查看

我一直在学习位级操作的教程。我正在编写的代码如下:

    int main(void){

    puts("bit-level calculations:");
    puts("----------------------");



    unsigned int x = 10;
    unsigned int y = 1;
    unsigned int result;


    result = x&y;
    printf("x & y = %d\n", result);

    result = x|y;
    printf("x | y = %d\n", result);

    result = x^y;
    printf("x ^ y = %d\n", result);



   }

结果如下:
x&y=0
x | y=11
x^y=11
然而,我的问题是第一个答案。我所理解的是1&0=0,但是1&1=1,我所期望的是我应该得到
至少10&1=10。因为x的第一位是1,y的第一位是1,x的第二位是0,y的第二位是0,所以结果应该是0。问题是,为什么我只得到了零,或者和异或,我收到了两位作为结果。
非常感谢。我知道有一些关于位级操作的问题,但是答案并没有澄清我的问题。

最佳答案

记住,这些是二进制运算符。你要看数字的基数是2位,而不是10位。让我们这样做吧。我将使用下标来指示每个数字的基数。
首先,我们把数字转换成基数2。
1010=10102(基数10中的10是基数2中的“1010”)
110=12(在任何一个基中,一个写为“1”)
接下来,我们必须记住从右到左,而不是从左到右。我们可以用0来填充数字,就像37和037在十进制中一样,都是37-12和00012在二进制中一样。
1010=10102
0110=00012
现在执行二进制操作。你现在明白为什么10102&00012等于00002了吗?

10-07 19:32
查看更多