7 #include "cln/integer.h"
12 #include "cln/integer.h"
14 #include "cl_I_byte.h"
18 const cl_I ldb (const cl_I& n, const cl_byte& b)
21 // (ldb (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^s - 1 (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^s-2^(l-p)).
30 var uintL p = b.position;
31 var uintL l = integer_length(n); // l = (integer-length n)
36 return 0; // 0 als Ergebnis
39 return cl_fullbyte(0,s); // 2^s-2^0 als Ergebnis
42 { var cl_I erg = ldb_extract(n,p,(p+s<l ? p+s : l));
44 if ((s>lp) && minusp(n)) // s>l-p und n<0 ?
45 { return logior(erg,cl_fullbyte(lp,s)); } // setze Bits l-p,...,s-1
46 // (logisches Exklusiv-Oder oder Addition ginge auch)