我有一个任务要练习,但我就是想不出答案。要知道,我完全是个初学者。练习题只有1分钟,应该是小孩子的游戏。但我正在绞尽脑汁。我应该为以下内容编写一个表达式:设x和k是int型变量,用位运算符公式化一个C条件,当x小于2^(k-1)时,该条件为真。我会用?-操作员来完成。所以类似于()-1:0但是哪个条件必须在括号里呢?我想不出一个可以用来比较小于的按位运算符。我真的没有任何想法:/
yqkkidmi1#
您的意思似乎如下所示
if ( x < 1 << k - 1 ) { /*...*/ }
条件是表达式k - 1不是负的并且表达式1 << k - 1在类型int的对象中可表示为正值。
k - 1
1 << k - 1
int
ndasle7k2#
设x和k是int型变量。
int x; int k;
用当x小于2^(k-1)时恰好为真的按位运算符公式化C条件。从直接翻译开始:
if ( x < pow(2,k-1) ) { ... }
然后使用位运算符删除对pow的调用2的k-1次方为:1<<(k-1)
pow
1<<(k-1)
2 ^ 3 == 1 << 3 == 8 2 ^ 5 == 1 << 5 == 32
所以最后的表达式是:
( x < 1<<(k-1) ); // Result will either be 1 or 0
不需要使用三元?:运算符。布尔表达式<将自己计算为1或0!
?:
<
2条答案
按热度按时间yqkkidmi1#
您的意思似乎如下所示
条件是表达式
k - 1
不是负的并且表达式1 << k - 1
在类型int
的对象中可表示为正值。ndasle7k2#
设x和k是int型变量。
用当x小于2^(k-1)时恰好为真的按位运算符公式化C条件。
从直接翻译开始:
然后使用位运算符删除对
pow
的调用2的k-1次方为:
1<<(k-1)
示例:帮助澄清
所以最后的表达式是:
不需要使用三元
?:
运算符。布尔表达式
<
将自己计算为1或0!