我应该完成的少数编程任务之一是处理位级运算符,我希望我做得正确。

#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;
}

分配限制了我们可以使用的内容,因此不可能有循环、条件和许多其他限制。我有点和位级运算符混淆,所以我只是希望如果有任何错误,我可以修复它,并了解为什么它是错误的。谢谢。

最佳答案

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

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

你应该否定x,而不是右手边:
int most = (~x & (0xFF<<(sizeof(int)-1<<3)));

关于c - 位级运算符,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21662769/

10-08 22:45