<div>Hi, guys,I&#39;m a newbie, If I&#39;m wrong, please forgive me.</div>
<div>Please look at the following code (mpz/and.c):</div>
<div>void<br>mpz_and (mpz_ptr res, mpz_srcptr op1, mpz_srcptr op2)<br>{<br>&nbsp; mp_srcptr op1_ptr, op2_ptr;<br>&nbsp; mp_size_t op1_size, op2_size;<br>&nbsp; mp_ptr res_ptr;<br>&nbsp; mp_size_t res_size;<br>&nbsp; mp_size_t i;<br>&nbsp; TMP_DECL;</div>

<div>&nbsp; TMP_MARK;<br>&nbsp; op1_size = op1-&gt;_mp_size;<br>&nbsp; op2_size = op2-&gt;_mp_size;</div>
<div><font color="#ff0000">&nbsp; op1_ptr = op1-&gt;_mp_d;<br>&nbsp; op2_ptr = op2-&gt;_mp_d;</font><br>&nbsp; res_ptr = res-&gt;_mp_d;</div>
<div>&nbsp; if (op1_size &gt;= 0)<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (op2_size &gt;= 0)<br>&nbsp;{<br>&nbsp;&nbsp; res_size = MIN (op1_size, op2_size);<br>&nbsp;&nbsp; /* First loop finds the size of the result.&nbsp; */<br>&nbsp;&nbsp; for (i = res_size - 1; i &gt;= 0; i--)<br>
&nbsp;&nbsp;&nbsp;&nbsp; if ((op1_ptr[i] &amp; op2_ptr[i]) != 0)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;<br>&nbsp;&nbsp; res_size = i + 1;</div>
<div>&nbsp;&nbsp; /* Handle allocation, now then we know exactly how much space is<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; needed for the result.&nbsp; */<br>&nbsp;&nbsp; if (UNLIKELY (res-&gt;_mp_alloc &lt; res_size))<br>&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; _mpz_realloc (res, res_size);<br><font color="#ff0000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; op1_ptr = op1-&gt;_mp_d;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; op2_ptr = op2-&gt;_mp_d;&nbsp;&nbsp; </font></div>
<div><font color="#ff0000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //**&nbsp;nobody modified op1_ptr,op1-&gt;_mp_d,op2_ptr,op2-&gt;_mp_d. Why&nbsp;do we need to&nbsp;this again?</font><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; res_ptr = res-&gt;_mp_d;<br>&nbsp;&nbsp;&nbsp;&nbsp; }</div>
<div>&nbsp;&nbsp; res-&gt;_mp_size = res_size;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (LIKELY (res_size != 0))<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mpn_and_n (res_ptr, op1_ptr, op2_ptr, res_size);<br>&nbsp;&nbsp; return;<br>&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else /* op2_size &lt; 0 */<br>&nbsp;{<br>&nbsp;&nbsp; /* Fall through to the code at the end of the function.&nbsp; */<br>
&nbsp;}<br>&nbsp;&nbsp;&nbsp; }<br>&nbsp; else</div>
<div>{</div>
<div>....</div>
<div>{</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>....</div>
<div>}</div>
<div>&nbsp;</div>
<div>I think it is redundant.</div>