Closed. This question needs details or clarity。它当前不接受答案。
想改善这个问题吗?添加详细信息并通过editing this post阐明问题。
2年前关闭。
我正在编写一个位集成员资格谓词,该谓词应处理x的所有值:
是否有更有效的实施方式?
不知道这是否真的带来任何有意义的改进。检查您的编译器输出以确保。
想改善这个问题吗?添加详细信息并通过editing this post阐明问题。
2年前关闭。
我正在编写一个位集成员资格谓词,该谓词应处理x的所有值:
int Contains(unsigned int A, int x)
{
return (x >= 0) && (x < 8 * sizeof A) && (((1u << x) & A) != 0);
}
是否有更有效的实施方式?
最佳答案
如果x
是未签名的,则可以跳过下限检查。
从N1570起:
6.3.1.3有符号和无符号整数
将具有整数类型的值转换为_Bool以外的其他整数类型时,如果
该值可以用新类型表示,但不变。
否则,如果新类型是无符号的,则通过重复加或
比新类型可以表示的最大值多减去一个
直到该值在新类型的范围内。 60)
unsigned int y = x; // Wrap around if x is negative
return (y < CHAR_BIT * sizeof A) && (1u << y & A) != 0;
不知道这是否真的带来任何有意义的改进。检查您的编译器输出以确保。
关于c - 位集隶属函数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46196752/
10-09 08:46