c - (x % y) 和 (x & (y-1)) 是否等效?
问题描述
我认为计算 x % y 相当于 x & (y-1),但是当我尝试
if (x % y == x & (y-1)) {
...
}
除非(int)(x & (y-1))
改用,否则我总是会出错。
这可能是因为“按位与”的返回类型。但是在谷歌搜索后,我没有找到很多关于你获得什么类型的数据的信息&
。
谁能帮忙解释一下?
编辑:x 和 y 都是整数类型,y 是 2 的幂。
解决方案
结果的类型由通常的算术规则确定(+
例如,与 for 相同),但这不是您的问题。
你可能想看看这里:
7 == != For relational = and ≠ respectively
8 & Bitwise AND
因此(x & (y - 1))
,即使没有类型转换,放入括号就足够了。
y
但请注意,您的比较结果仅在2 的幂时才成立。
y
在你的测试中是 2 的幂吗?然后,由于运算符优先级,您的编译器将该语句视为带有额外括号的语句-</p>
if(((x % y) == x) & (y - 1)) {
通过类型转换,你得到了正确的表达
if((x % y) == (x & (y - 1))) {
这是真的,如果y
二进制是单个 1 后跟几个 0。
推荐阅读
- vb6 - 如何在vb6中基于字符串,日期创建自动数字
- sql - 如何将fasta文件转换为sql表?
- reflection - 如何使用包含该类型的局部变量设置类的类型?
- php - PHP mysql问题在创建上传图片到blob未定义索引_FILES
- jenkins - 尝试使用声明性 jenkinsfile 从根文件夹上传到 Artifactory 时发现 0 个工件
- python - TypeError:使用 np.asarray 时,float() 参数必须是字符串或数字,而不是“csr_matrix”
- python - 遍历 3d numpy 数组并将每个值与校准值相乘
- android - firebase 使用循环引用持久化数据
- python - 在 1 行中迭代二维列表
- python - 在遍历另一个列表时比较 2 个列表 - Python