c语言 - 指针时间变量值,var = (var + 1)&3



我所指的代码出现 这里。我不知道这是合法的c,不会导致段错误。什么意思?等同于var = &var[3]吗?

不。表达式pos = (pos+1)&3;等效于

pos = pos + 1;
pos = pos & 3;

除非它并不意味着将中间值存储回pos变量。

编辑以在评论中回复其他问题

按位 AND 运算符在值 3 处修剪或更确切地说包装递增过程。代码可以写成

pos = pos + 1;
pos = pos % 4;

在这种情况下,这意味着:

pos = pos + 1;
if( pos > 3 )
pos = 0;

但是,算术

模(谢谢,@chux - 恢复莫妮卡(或按位 AND 表达式在更少的操作中产生相同的结果,最重要的是没有条件分支,这会降低效率。

比较问题为什么处理排序数组比处理未排序数组更快?以及这个答案。

最新更新