是否可以使用按位运算限制 int 值(设置范围)?

发布于 2024-11-04 04:57:09 字数 332 浏览 1 评论 0原文

我需要让我的整数计数器以环绕方式具有从 1 到 6(含)的值。即从 1 开始,数到 6,然后返回到 1。我想知道是否可以使用某种按位逻辑来实现。当然,对于下面的 if 语句来说这是微不足道的,但我想知道一个衬里:)

int counter = 1;

for...
    do something
    if (counter++ == 7) counter = 1;

补充: 这就是为什么我想要 1 个衬垫:

byte output = (byte)((inputByte & 0xF8) | counter++);

I need to have my integer counter have values from 1 to 6 inclusive in wrap around fashion. Namely starting from 1, I count to 6 and go back to 1. I wonder if it's possible to achieve using some sort of bitwise logic. Of course it's trivial with if statement as below but I am wondering about one liner :)

int counter = 1;

for...
    do something
    if (counter++ == 7) counter = 1;

Addition:
Here is why I want 1 liner:

byte output = (byte)((inputByte & 0xF8) | counter++);

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

眼波传意 2024-11-11 04:57:09

使用模运算符。

do something;    
++counter; counter %= 7; ++counter;

要使用实数按位运算,您的模数必须是 2 的幂,但此处的情况并非如此。

PS:如果您的计数器从 0 而不是 1 开始,则不需要第二个 ++counter 并且会编写类似以下内容的内容:

for (int counter = 0; (somecondition); ++counter, counter %= 7)
{
    do something;
}

PPS:请注意,通常 if 会执行不过,比模数更快。

Use the modulo operator.

do something;    
++counter; counter %= 7; ++counter;

To use real bitwise operations your modulo must be a power-of-2 which is not the case here.

PS: If your counter started at 0 instead of 1, you wouldn't need the second ++counter and would write something like :

for (int counter = 0; (somecondition); ++counter, counter %= 7)
{
    do something;
}

PPS: Note that generally an if performs faster than a modulo, tho.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文