C#。位运算的逻辑谜题。只设置了一位?

发布于 2024-10-11 06:54:42 字数 150 浏览 2 评论 0原文

不过,这对于 C++ 人员来说应该很容易。但有人问我如何在 C# 中做到这一点。应该差别不大。

如何查明长变量是否仅设置了一个位?

除了一些残酷的力量转移所有位并计算设置的内容之外,我想不出任何东西。

This should be easy for C++ people though. But I was asked how to do it in C#. Shouldnt be much of difference.

How to find out if a long variable has only one bit set?

I cant think anything except some brutal force shifting all bits and counting whats set.

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

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

发布评论

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

评论(3

那些过往 2024-10-18 06:54:42

如果使用 2 的补码算术计算 (x&(x-1)) 为 0,则非负二进制整数值 x 为 2 的幂。

2 的幂意味着设置了一位。

http://aggregate.org/MAGIC/#Is%20Power%20of%202

编辑:

允许零情况:

bool singleBit = x>0 && (x&(x-1))==0

A non-negative binary integer value x is a power of 2 if (x&(x-1)) is 0 using 2's complement arithmetic.

Powers of 2 would mean a single bit is set.

http://aggregate.org/MAGIC/#Is%20Power%20of%202

EDIT:

To allow for the zero case:

bool singleBit = x>0 && (x&(x-1))==0
太阳男子 2024-10-18 06:54:42

在 C++ 中:

unsigned long v;
bool f; // result
f = v && !(v & (v - 1));

解释: v &如果仅设置了一位或 v == 0,则 (v - 1) == 0。

In C++:

unsigned long v;
bool f; // result
f = v && !(v & (v - 1));

Explanation: v & (v - 1) == 0 if only one bit is set or v == 0.

黑寡妇 2024-10-18 06:54:42

刚刚在 PHP 中尝试过:

$singleBit = $bits && !($bits & ($bits - 1));

Just tried it in PHP:

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