繁体   English   中英

理解求和逻辑

[英]Understanding summation logic

这是求和逻辑,它不使用+运算符执行加法,如下所示,

int add(int a, int b) {
   const char *c=0;
   return &(&c[a])[b];
}

任何人都可以让我理解return声明如何沸腾添加ab

请记住,因为a[b]*(a + b) ,所以每当索引数组时都会进行隐式添加。 这意味着&a[b]a + b因为地址和解除引用运算符被抵消了。

然后,将c设置为0 ,我们可以替换:

&(&c[a])[b] = &(&*(0 + a))[b] = &(a)[b] = &a[b] = &*(a + b) = a + b

我不确定这是否定义明确且可移植,但我认为它适用于大多数“典型”系统。

好吧,它没有你想象的那么复杂,但是肯定没有什么可以使用的,因为它有点脏;)

c是一个指向NULL0的指针,你取偏移量&0[a] ,恰好是a ,然后从&0[a]取偏移量[b] &0[a] ,即0+a+b

这就是魔术。

这只是添加指针导致添加。

要理解它

 &c[a]  = c + a;

 &(&c[a])[b] = &c[a] + b = c + a + b;

当你取&(&c[a])[b] ,它将给出c + a + b 由于c为0,因此为a+b

实际上,为了在没有+运算符的情况下求和两个整数,使用按位运算符和全加器电路中使用的逻辑。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM