• 生活小妙招免费各类生活中的小问题知识以及音乐简谱等,是你了解世界未知知识的好地方。

C语言置零直接 =0不就好了,为什么要按位与?

十万个为什么 空空 2024-3-18 20:26:36 3次浏览

关于问题C 语言置零直接 =0 不就好了,为什么要按位与?一共有 5 位热心网友为你解答:

【1】、来自网友【ymismy】的最佳回答:

rox 最快

【2】、来自网友【IOT 程序员】的最佳回答:

xor eax,eax 生成的指令 31 c0

mov eax, 0 生成的指令 89 04 25 00 00 00 00

mov 取指(假设取指令一次取 32 位),译码器一看还有一半没取完,就要要多一个周期把立即数取到并放到寄存器里。

xor 就简单了,译完码直接就执行了。少了一个周期。

现代 cpu 一般会预取很长的指令到 cache 中,即使如此,还是有机会指令只加载了一半,mov 指令的可能性比 xor 要大很多。另外长指令的译码时间也变长。由于挤占更多的 cache 导致影响下面的指令。

还有一点是 xor 几乎在所有的 cpu 上都是清零的首选。

总之 xor 指令比 mov 指令有更好的性能。

C 编译器 GCC 打开 O2 选项,^=和=0 都会翻译成 xor 的。

【3】、来自网友【拖麻拖】的最佳回答:

为了把一个变量置零而采用位与的方法 这个方法不太常见。但是采用变量与自己异或的方法,这个方法很常见。

如果直接令一个变量等于 0,那么需要消耗额外的内存和额外的时钟周期。

如果用按位操作的话,就会节约至少两个时钟周期,而且节约这个变量所占据的内存大小的内存或指令空间。

【4】、来自网友【日冲信息 黄】的最佳回答:

除非您是在单片机上编程,否则没有必要在这种问题上浪费时间。

赋值置零跟位与置零的区别仅仅是赋值指令要比位与指令多几次运算而已。这点差异跟 PC 的 CPU 性能相比,完全可以忽略不计。另外,PC 的编译器做得比较完善,通常可以主动进行优化,使得赋值置零跟位与置零的编译结果相差无几。

在性能较低的单片机上,这种差异会比较明显一些。同时,单片机用的编译器大都比较简单,不会做主动优化,写代码的时候可能注意一些会比较好。

不管怎么说,这两种方式,对程序的执行效率影响都不大,抠得多了,给人感觉像是在拼命研究茴字的写法—有那么点迂腐。

如有冒犯,请一定海涵。

【5】、来自网友【养家糊口的上海中年人】的最佳回答:

提出问题的人,估计不懂程序吧。置零是把某个数字清零,全部为零。按位与是为了判断某位是不是有数值,一般用来做标记位。

以上就是关于问题【C 语言置零直接 =0 不就好了,为什么要按位与?】的全部回答,希望能对大家有所帮助,内容收集于网络仅供参考,如要实行请慎重,任何后果与本站无关!

喜欢 (0)