Binary 设置给定的二进制标志

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

我有一个二进制数,我想对它的一个标志应用一个布尔值(真/假)

假设一个名为myBinary的二进制值 我想将布尔值X应用于myBinary的第四个标志(0x08)

我知道我可以这样做:

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);
}