检查字节是0x00还是0xFF的算法

Jon*_*n V 1 c boolean-logic

是否有逻辑等同于:

if(byte != 0x00 || byte != 0xFF)

if(byte != 0x00 && byte != 0xFF)
Run Code Online (Sandbox Code Playgroud)

我是程序内存限制,可以使用每个优化:)

用单词解释,如果所有位都相同(所有0或全1),你能用逻辑函数检查吗?

谢谢!

Ker*_* SB 6

也许(unsigned char)(byte + 1) > 1&&当然,假设你的意思.并假设CHAR_BIT == 8,如果你想要"所有位设置"的意思0xFF.


Ste*_*sop 6

假设byte有一个无符号的8位类型[编辑:并假设你的意思&&,而不是||],你可以尝试:

!((uint8_t)(byte+1) <= 1)
Run Code Online (Sandbox Code Playgroud)

显然,不可能说这是否会产生更小的代码,你只需要尝试看看.毫无疑问,其他人可以提出其他逻辑等效的表达方式.

您还可以查看编译器生成的内容,如果您怀疑编译器的优化不是很好,请查看其他更好的编译器生成的内容.这可能会为您提供其他在逻辑上等效的表达式的想法.