c# 位运算中的小于

eagi6jfj  于 2022-12-02  发布在  C#
关注(0)|答案(2)|浏览(181)

我有一个任务要练习,但我就是想不出答案。要知道,我完全是个初学者。练习题只有1分钟,应该是小孩子的游戏。但我正在绞尽脑汁。
我应该为以下内容编写一个表达式:
设x和k是int型变量,用位运算符公式化一个C条件,当x小于2^(k-1)时,该条件为真。
我会用?-操作员来完成。所以类似于
()-1:0
但是哪个条件必须在括号里呢?我想不出一个可以用来比较小于的按位运算符。
我真的没有任何想法:/

yqkkidmi

yqkkidmi1#

您的意思似乎如下所示

if ( x < 1 << k - 1 ) { /*...*/ }

条件是表达式k - 1不是负的并且表达式1 << k - 1在类型int的对象中可表示为正值。

ndasle7k

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)

示例:帮助澄清

2 ^ 3 == 1 << 3 == 8
2 ^ 5 == 1 << 5 == 32

所以最后的表达式是:

( x < 1<<(k-1) ); // Result will either be 1 or 0

不需要使用三元?:运算符。
布尔表达式<将自己计算为1或0!

相关问题