Binary 设置给定的二进制标志
我有一个二进制数,我想对它的一个标志应用一个布尔值(真/假) 假设一个名为myBinary的二进制值 我想将布尔值X应用于myBinary的第四个标志(0x08) 我知道我可以这样做:Binary 设置给定的二进制标志,binary,bit-manipulation,bitwise-operators,Binary,Bit Manipulation,Bitwise Operators,我有一个二进制数,我想对它的一个标志应用一个布尔值(真/假) 假设一个名为myBinary的二进制值 我想将布尔值X应用于myBinary的第四个标志(0x08) 我知道我可以这样做: function applyBoolean(int myBinary, int mask, boolean X) { if (x = true) myBinary = myBinary | mask else myBinary = myBinary & mask
function applyBoolean(int myBinary, int mask, boolean X)
{
if (x = true)
myBinary = myBinary | mask
else
myBinary = myBinary & mask
return myBinary
}
编辑:
因此,要更改第四个标志,我可以这样做:
applyBoolean(100101001000,true)--->返回值:101101
applyBoolean(100101001000,false)--->返回值:100101
现在我想知道是否可以不使用if/else,只使用按位操作来实现它
谢谢(我假设mask==0x8
如果X==true
和mask==0x8
如果X==false
,否则您的语句将与您的代码不匹配。)
要使用“仅按位运算”,必须将该布尔值转换为数字。由于您没有指定编程语言,因此我假定您正在寻找一般性/概念性的答案。
然而,这是否可能取决于编程语言的特性,即将布尔值视为数字的能力 例如,在JavaScript中,这可以像 在Java中,这完全不能仅使用位运算符来实现,因为
boolean
不能转换为数字。如果,则必须使用三元运算符或函数
在某些语言中,如C99之前的汇编语言和C语言,这可能被认为是不适用的,因为这些语言缺少(真)布尔类型。但是,如果
0
和1
被认为是布尔型的,那么解决方案就像用这些语言重写上述代码片段一样简单
最后(可能也是最不重要的一点),有些语言,比如Brainfuck,只是缺少布尔运算符,使得这项任务不可能完成。你说
将布尔值X应用于。。。myBinary
,但您还没有在示例中演示我知道我可以用这种方式来实现它。您是否确实要将x
视为二进制值1000
(8)?我想我们可以用多一点的解释来解释你想要实现的目标。请为您的applyBoolean
函数提供示例输入和预期输出。通过“应用”,您似乎在询问如何将给定位设置为给定值,将数字视为位集。对吗?我认为您提供的代码非常接近,但不正确。还有,你用的是什么语言?你应该编辑你的问题,添加更多相关的标签,更清楚地解释你想要什么。没错,丹,如果我的问题不清楚,对不起。我刚刚用applyBoolean方法编辑了一个示例
function applyBoolean(myBinary, X)
{
return (myBinary & ~0x8) ^ (X << 3);
}
function applyBoolean($myBinary, $X)
{
return ($myBinary & ~0x8) ^ ($X << 3);
}