2014-02-09 31 views
1

我所欠缺的几项编程任务之一是处理位级操作符,我希望能够正确执行此操作。位级别操作符

#include <stdio.h> 

int main(void){ 
    int x; 
    printf("Enter an x: "); 
    scanf("%x", &x); 
    printf("X = %d\n", x); 
// Any bit in x is 1 
    x && printf("A bit in x is 1!\n"); 
// Any bit in x is 0 
    ~x && printf("A bit in x is 0!\n"); 
// Least significant byte of x has a bit of 1 
    (x & 0xFF) && printf("A bit in least significant byte of x is 1!\n"); 
// Most significant byte of x has a bit of 0 
    int most = (x & ~(0xFF<<(sizeof(int)-1<<3))); 
    most && printf("A bit in the most significant byte of x is 0!\n"); 
    return 0; 
} 

该分配限制了我们可以使用的内容,因此可能没有循环或条件以及许多其他限制。我对位级操作符有点困惑,所以我只是希望如果有任何错误,我可以修复它,并了解它为什么错了。谢谢。

+3

当'&&'做同样的事情时,不允许使用'if'的意义是什么? – Nabla

+0

该章节介绍了该操作符。我认为这是更多的使用,如果==。它看起来好吗? – WorldDominator

+0

根据你想要的可移植性,你不应该硬编码一个字节有8位(0xFF)。 –

回答

2

你不应该使用这些操作符号整数,因为有些情况下会导致不确定/实现定义:Arithmetic bit-shift on a signed integer

int most = (x & ~(0xFF<<(sizeof(int)-1<<3))); 

你应该否定x,而不是右边:

int most = (~x & (0xFF<<(sizeof(int)-1<<3))); 
+0

我以为我确实需要unsigned。谢谢你指出我。此外,〜x是正确的,它现在似乎正常工作,我也将我的printf更改为%u。我将为旁观者更新上述内容。谢谢。 – WorldDominator