Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 如果所有较低的7位都设置为无分支,则设置第8位_C_Algorithm_Bit Manipulation_Bit_Bit Shift - Fatal编程技术网

C 如果所有较低的7位都设置为无分支,则设置第8位

C 如果所有较低的7位都设置为无分支,则设置第8位,c,algorithm,bit-manipulation,bit,bit-shift,C,Algorithm,Bit Manipulation,Bit,Bit Shift,我试图设置字节值中的最高位,只有在设置所有较低的7位时,才不引入分支 例如,给定以下输入: input: 0b_0010_1100 -> return same value input: 0b_0101_0101 -> return same value input: 0b_0111_1111 -> all bits set except MSB, return 0xff input: 0b_1010_1100 -> MSB is already set, return

我试图设置字节值中的最高位,只有在设置所有较低的7位时,才不引入分支

例如,给定以下输入:

input: 0b_0010_1100 -> return same value
input: 0b_0101_0101 -> return same value
input: 0b_0111_1111 -> all bits set except MSB, return 0xff
input: 0b_1010_1100 -> MSB is already set, return same value
这仅适用于8位大小的值

我尝试了几次使用popcount的尝试,但没有对所有输入都起作用。

怎么样:

return x | ((x+1) & 0x80);

是否保证输入中只能设置较低的7位?如果是这样,@Brendan的解决方案是正确的。因为您接受的答案只有在已知第8位明确的情况下才有条件有效,所以您应该编辑该问题,说明该条件是问题的前提。堆栈溢出问题和答案应该是一个持久的存储库,以便将来为其他人服务。因此,问题不仅仅在于回答您的问题,还在于清楚地提出问题,以便它和答案对将来的其他人有用。
input:0b_0111_1111->除最高位外的所有位设置,返回0xff
这是一个遍历
设置的所有位(最高位除外)
表示最高位不能为空set@EricPostpischil隐马尔可夫模型。。你真的测试过吗?因为从我所看到的情况来看,无论第8位是设置的还是清除的,它都会工作。@EricPostChil当输入大于一个字节时,它会停止工作,所以我编辑了我的问题来说明这一点。或者
返回x |((x&0x7F)+1)&0x80)如果还可以设置其他位。@fpiette:您的版本与我的版本具有相同的最终结果;即使
x
大于8位(并且即使
x
类似于
UINT_MAX
,其中
x+1
溢出并环绕)。我认为这在x已经设置了MSB的情况下不起作用。@Lundin:如果已经设置了MSB,那么
x |(任何&MSB)无论
任何东西
是什么,都保证不做任何事情。是的,但我的意思是,如果仅当其他7位都是1时才应设置MSB,则此代码不会这样做。