c - 三元运算符

标签 c operators

unsigned char result= 0x0;
int maxX,maxY;
maxX = maxY = 0;
printf("enter input\n");
scanf("%d",&maxX);
scanf("%d",&maxY);
(maxX < 200)?(result | (1 )) :0;
(maxX > 1500)?(result | (1 <<1  )) :0;
(maxY < 200)?(result | (1 <<2  )) :0;
(maxY > 1500)?(result | (1 << 3)) :0;

printf("Result is %d\n",result);

为什么无论 maxXmaxY 输入如何,result 始终为零?

最佳答案

您正在计算三元运算符,但没有将它们分配给任何东西。这:

(result | (1 ))

获取 result 并将其与 1 进行或运算,但不对结果执行任何操作。

如果你用-Wall -Wextra编译,它会警告你:

/tmp/x1.c: In function ‘main’:
/tmp/x1.c:12: warning: statement with no effect
/tmp/x1.c:13: warning: statement with no effect
/tmp/x1.c:14: warning: statement with no effect
/tmp/x1.c:15: warning: statement with no effect

如果您希望获取该结果并将其分配回 result,请执行以下操作:

result |= (maxX < 200)?(1) :0;
result |= (maxX > 1500)?(1 <<1 ) :0;
result |= (maxY < 200)?(1 <<2 ) :0;
result |= (maxY > 1500)?(1 << 3) :0;

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

相关文章:

c - 验证 do-while 循环中的输入类型

c# - 泛型和显式/隐式运算符

javascript - 用javascript中的变量替换运算符

c++ - C++ (Visual Studio 6) 中 operator< 和 operator[] 的默认返回值是什么?

php - 如何在 PHP 中显示数据库中的数据,其中每出现 4 个数据,其他数据都放在下面

c - 如何在C中以某种方式从文件中获取输入

c - 您不需要取消引用指针来对寄存器进行按位操作吗?

xml - XPath 'or' 运算符使用 'pipe' 字符?

c - 在结构上使用 sizeof 运算符

C++地址值和sizeof