如果一个为高,则将字节中的所有位设置为高

时间:2019-04-07 13:13:28

标签: c++ c

如果某个字节的任何位为高,则我需要将其设置为高。如果它们都不为高,则所有位都应为低。

因此,如果字节为0000 1000,则应将其设置为1111 1111;如果字节为0000 0000,则应保留为0000 0000

我该怎么做而不必使用if语句?

我已经尝试使用按位运算符来执行此操作,但是我不太清楚如何执行此操作。

我也在互联网上(也在Stackoverflow上)搜索了如何执行此操作,但没有找到任何东西。

3 个答案:

答案 0 :(得分:4)

一项简单的工作:

if (byte) {
    byte = -1; // 0xFFFF..
}

答案 1 :(得分:3)

如果a不是0,则要设置所有位。一种简单的方法是:

unsigned char setallbits(unsigned char a) {
    return (a != 0) ? ~0U : 0;
}

为避免测试,您可以考虑将a != 0评估为10,然后将其取反:

unsigned char setallbits(unsigned char a) {
    return -(a != 0);
}

或使用惯用的!!aa转换为布尔值:

unsigned char setallbits(unsigned char a) {
    return -!!a;
}

最后2个函数采用负数的二进制补码表示。纯粹主义者可以实现将其移植到过时的体系结构的便利性,这些体系结构表示具有符号/幅度的负整数或用-(unsigned)(a != 0)-(unsigned char)!!a进行补码的整数,与预期的一样神秘。

答案 2 :(得分:0)

未签名版本:

unsigned char foo(unsigned char x)
{
    return x ? ~0 : x;
}

所有解决方案!或!=表示条件语句。