Знаковое умножение столбиком 32 на 32 с 64 р. результатом на C. Без использования оп. умножения:-)) void mul3232result64(long op1,long op2,long *result) { long high; unsigned long lowres,tmp,low; char sign; sign=0; if(op1<0) {sign=1;op1=-op1;} if(op2<0) {op2=-op2;sign^=1;} low=op2; high=0L; //{high,low} - 64 bit version of abs of operand op2; lowres=0L; //low 32 bits of result result[1]=0L; //high 32 bits of result while (op1) { if((op1&1L)) { tmp=lowres+low; if(tmp lowres=tmp; result[1]+=high; } high<<=1; if((low&0x80000000L)) high++;//CARRY detection low<<=1; op1>>=1; } if(sign) { lowres^=0xffffffffL; result[1]^=0xffffffffL; tmp=lowres+1L; if(tmp lowres=x; } result[0]=lowres; /* result[1] - high 32 bit of result; result[0] - low 32 bit of result */ }