如果字节中的所有位都设置为高,则设置为高字节
Set all bits in byte high if one is high
如果它的任何位很高,我需要将字节中的所有位设置为高。如果它们都不高,则所有位都应该是低电平。
因此,如果字节0000 1000
则应设置为1111 1111
,如果0000 0000
,则应保持0000 0000
。
我将如何在不使用 if 语句的情况下做到这一点?
我已经尝试使用按位运算符执行此操作,但是我不太清楚如何做到这一点。
我还在互联网上(也是Stackoverflow(上搜索了如何做到这一点,但我什么也没找到。
一个简单的if可以完成工作:
if (byte) {
byte = -1; // 0xFFFF..
}
如果a
不是0
,您希望设置所有位。一个简单的方法是:
unsigned char setallbits(unsigned char a) {
return (a != 0) ? ~0U : 0;
}
为了避免测试,您可以考虑a != 0
的评估结果为 1
或 0
,然后否定:
unsigned char setallbits(unsigned char a) {
return -(a != 0);
}
或者使用惯用!!a
将a
转换为布尔值:
unsigned char setallbits(unsigned char a) {
return -!!a;
}
最后 2 个函数假定负值的 2 补码表示。纯粹主义者可以实现到过时的架构的可移植性,这些架构表示带有符号/幅度的负整数或带有-(unsigned)(a != 0)
或-(unsigned char)!!a
的补码,这些或就像预期的那样神秘。
无符号版本:
unsigned char foo(unsigned char x)
{
return x ? ~0 : x;
}
所有带有 !! 或 != 的解决方案都意味着条件语句。
相关文章:
- std::ifstream::read 不会读取所有 512 字节,并设置 EOF 和失败位
- 复制后删除原始数组指针将前 3 个字节设置为 0
- 是否强制转换void**并将第一个字节设置为nullptr
- 蓝牙LE:设置字节数组的特征会发送错误的值
- 如果字节中的所有位都设置为高,则设置为高字节
- 在 C++ 中立即设置故障位(在读取任何字节之前)
- 如何在没有循环的字节中设置位
- 你能为 Asio 的read_until设置字节限制吗?
- 以 C++ 为单位设置(短整型)的上下字节
- 如何在C++中设置短整型的上限和下限字节
- 如何正确设置fwrite()的大小和计数参数以编写一块字节
- 函数返回布尔值,只设置整个寄存器的1个字节
- 将 int 的所有字节设置为(无符号字符)0,保证表示零
- 如何在 Windows 中将文件大小设置为 100 字节 C++.
- C++/编译:是否可以设置VPTR(全局vtable + 2字节索引)的大小
- 如何使用 #define 语句来设置字节数组
- 如何告诉GCC通过编译器设置(不是编译指示)将结构大小边界设置为4字节?
- 设置 for 循环以循环,直到检测到空字节
- 是否有Windows API以原子方式设置16字节数组
- 如何设置整数的前三个字节?在C++中