7 #include "cln/integer.h"
12 #include "cln/integer.h"
14 #include "cl_I_byte.h"
18 const cl_I mask_field (const cl_I& n, const cl_byte& b)
21 // (mask-field (byte s p) n) extrahiere die Bits p,...,p+s-1 von n.
22 // l:=(integer-length n)
24 // Falls n>=0: 0, falls n<0: 2^(p+s) - 2^p (s Einsenbits).
27 // Extrahiere die Bits p,...,q-1 von n.
28 // Falls p+s>l und n<0, füge p+s-l Einsenbits an (addiere 2^(p+s)-2^l).
30 var uintC p = b.position;
32 var uintC l = integer_length(n); // l = (integer-length n)
37 return 0; // 0 als Ergebnis
40 return cl_fullbyte(p,ps); // 2^(p+s)-2^p als Ergebnis
43 { // Bits p,...,q-1 mit q = min(p+s,l) extrahieren:
44 var cl_I erg = mkf_extract(n,p,(ps<l ? ps : l));
45 if ((ps>l) && minusp(n)) // p+s>l und n<0 ?
46 { return logior(erg,cl_fullbyte(l,ps)); } // setze Bits l,...,p+s-1
47 // (logisches Exklusiv-Oder oder Addition ginge auch)