首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将所有位设置为最低有效位

将所有位设置为最低有效位
EN

Stack Overflow用户
提问于 2019-01-30 05:24:47
回答 3查看 1.7K关注 0票数 0

如果我有一个int类型的x,我如何获取x的LSB的值并将该数字中的所有其他位都设置为该LSB?

我已经使用位运算符和逻辑运算符有一段时间了(不是双关语),我理解它们是如何工作的。

移位运算符x >> 3x << 3将x的位分别向左和向右移动三个空格,我知道我们可以使用像^ |&这样的运算符来处理位。我很难理解这个特定问题的逻辑。

编辑:允许我们为此使用的运算符是!~&^|+ << >>

EN

回答 3

Stack Overflow用户

发布于 2019-01-30 05:28:14

字面意思是:

代码语言:javascript
复制
type x /*=some value*/;
_Bool lsb = x&1;
x = lsb ? ~(type)0 : (type)0;

在2的补码架构上优化编译器,使其分支更少,相当于:

代码语言:javascript
复制
 type x /*=some value*/;
_Bool lsb = x&1;
 x = -lsb;

(或者不带中间lsb变量的-(x&1)。)

https://gcc.godbolt.org/z/2NXFpS

票数 5
EN

Stack Overflow用户

发布于 2019-01-30 05:46:09

如果(x & 1) {x = 4294967295 }否则{x=0}。换句话说,如果x是奇数,则LSB为1,因此将x设置为可能的最大32位无符号整数(所有位均设置为1),否则,如果x为偶数,则LSB为0,因此将x设置为0。但等等,它是一个有符号整数,将所有位设置为1将意味着有符号位已设置。因此,将其更改为: if (x & 1) {x= -1 } else {x=0}。正如尤金所评论的那样,我们可以只使用-(x & 1)。

票数 0
EN

Stack Overflow用户

发布于 2019-01-30 06:05:04

你们都认为-但最近我正在帮助检查学生和问题-找到LSB或LSB的值意味着数字中设置的最低位。这会让任务变得不那么琐碎和明显。

在这种情况下:

获取LSB - z & (~z+1)的值

代码语言:javascript
复制
 z = ~(z & (~z+1));
票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54429804

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档