我应该完成的少数编程任务之一是处理位级运算符,我希望我做得正确。
#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/