📄 shift.c
字号:
/* * SecuDE Release 4.1 (GMD) *//******************************************************************** * Copyright (C) 1991, GMD. All rights reserved. * * * * * * NOTICE * * * * Acquisition, use, and distribution of this module * * and related materials are subject to restrictions * * mentioned in each volume of the documentation. * * * ********************************************************************//* * shift(OPa,exp2b,result) */#include "arithmetic.h"void _shift(A, exp2b, S) L_NUMBER A[], S[]; int exp2b;{ register int wordshift; register int bitshift; register int left = exp2b > 0; register int right = exp2b < 0; register L_NUMBER cnt; register L_NUMBER *Ap; register L_NUMBER *Sp; register int WLmBITS; register L_NUMBER dH; register L_NUMBER dL; if (right) { bitshift = (-exp2b) & (WLNG - 1); WLmBITS = WLNG - bitshift; wordshift = (-exp2b) >> SWBITS; cnt = lngofln(A) - wordshift; if (cnt <= 0) { lngofln(S) = 0; return; } Sp = S; Ap = A + wordshift; lngofln(S) = cnt; dH = dL = *++Ap; for (; cnt > 1; cnt--) { dH = *++Ap; if (bitshift) { *++Sp = (dH << WLmBITS) | (dL >> bitshift); dL = dH; } else *++Sp = dH; } dH >>= bitshift; if (dH) *++Sp = dH; else lngofln(S)--; return; } if (left) { cnt = lngofln(A); bitshift = (exp2b) & (WLNG - 1); WLmBITS = WLNG - bitshift; wordshift = (exp2b) >> SWBITS; lngofln(S) = wordshift + cnt; Sp = S + lngofln(S); Ap = A + cnt; dH = dL = *Ap;/* sparc arch can't handle shifs with word length !!! */ if (bitshift) { if (dL >>= WLmBITS) { lngofln(S)++; *(Sp + 1) = dL; } } else dL = 0; for (; cnt > 1; cnt--) { dL = *--Ap; if (bitshift) *Sp-- = (dH << bitshift) | (dL >> WLmBITS); else *Sp-- = dH; dH = dL; } *Sp-- = dH << bitshift; for (; Sp > S; Sp--) *Sp = 0; return; } trans(A, S); return;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -