如果一个为高电平,则将所有位设置为高字节
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如果一个为高电平,则将所有位设置为高字节相关的知识,希望对你有一定的参考价值。
如果任何位为高,我需要将所有位设置为高字节。如果它们都不高,则所有位都应该为低。
因此,如果字节是0000 1000
它应该设置为1111 1111
,如果它是0000 0000
,它应该只保留0000 0000
。
如果不使用if语句,我将如何做到这一点?
我已经尝试使用按位运算符执行此操作,但我无法弄清楚如何执行此操作。
我还在互联网(也是Stackoverflow)上搜索了如何做到这一点,但我没有找到任何东西。
答案
如果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);
}
或者使用idioamtic !!a
将a
转换为布尔值:
unsigned char setallbits(unsigned char a) {
return -!!a;
}
最后2个函数假设负值的二进制补码表示。纯粹主义者可以实现对过时的体系结构的可移植性,这些体系结构代表具有符号/大小的负整数或与-(unsigned)(a != 0)
或-(unsigned char)!!a
的补充,这些结构与预期一样神秘。
另一答案
一个简单的工作如果:
if (byte) {
byte = -1; // 0xFFFF..
}
另一答案
未签名版本:
unsigned char foo(unsigned char x)
{
return x ? ~0 : x;
}
所有的解决方案!!或!=暗示条件陈述。
以上是关于如果一个为高电平,则将所有位设置为高字节的主要内容,如果未能解决你的问题,请参考以下文章