59 for(std::size_t i=0; i<n.size(); i++)
60 if(!(isalnum(n[i]) || (n[i]==
'-' && i==0)))
74 bool neg=a.is_negative();
82 std::size_t len = a.digits(2) + 2;
83 std::vector<char> buffer(len);
84 char *s = a.as_string(buffer.data(), len, 2);
86 std::string result(s);
88 if(result.size()<width)
91 fill.resize(width-result.size(),
'0');
94 else if(result.size()>width)
95 result=result.substr(result.size()-width, width);
99 for(std::size_t i=0; i<result.size(); i++)
100 result[i]=(result[i]==
'0')?
'1':
'0';
108 unsigned len = n.digits(base) + 2;
109 std::vector<char> buffer(len);
110 char *s = n.as_string(buffer.data(), len, base);
112 std::string result(s);
125 if(n.size()<=(
sizeof(
unsigned long)*8))
129 unsigned long mask=1;
130 mask=mask << (n.size()-1);
135 unsigned long other_bits=0;
137 for(std::string::const_iterator it=++n.begin();
149 return top_bit+other_bits;
155 mask=mask << (n.size()-1);
161 for(std::string::const_iterator it=++n.begin();
174 if(n.find_first_not_of(
"01")!=std::string::npos)
184 return BigInt(n.c_str(), 2);
196 std::function<
bool(
bool,
bool)> f)
198 const auto digits = std::max(a.digits(2), b.digits(2));
203 for(std::size_t i = 0; i < digits; i++)
205 const bool bit_a = tmp_a.is_odd();
206 const bool bit_b = tmp_b.is_odd();
207 const bool bit_result = f(bit_a, bit_b);
209 result +=
power(2, i);
223 if(a.is_ulong() && b.is_ulong())
224 return a.to_ulong() | b.to_ulong();
226 return bitwise(a, b, [](
bool a,
bool b) {
return a || b; });
235 if(a.is_ulong() && b.is_ulong())
236 return a.to_ulong() & b.to_ulong();
238 return bitwise(a, b, [](
bool a,
bool b) {
return a && b; });
247 if(a.is_ulong() && b.is_ulong())
248 return a.to_ulong() ^ b.to_ulong();
250 return bitwise(a, b, [](
bool a,
bool b) {
return a != b; });
259 std::size_t true_size)
266 llong_t result=a.to_long()<<shift;
268 true_size<(
sizeof(
llong_t)*8) ?
269 (1LL << true_size) - 1 :
280 std::size_t true_size)
287 const llong_t sign = (1LL << (true_size - 1)) & number;
288 const llong_t pad = (sign == 0) ? 0 : ~((1LL << (true_size - shift)) - 1);
299 std::size_t true_size)
305 llong_t result=a.to_long()<<shift;
306 if(true_size<(
sizeof(
llong_t)*8))
308 const llong_t sign = (1LL << (true_size - 1)) & result;
309 const llong_t mask = (1LL << true_size) - 1;
325 std::size_t true_size)
341 std::size_t true_size)
350 const ullong_t filter = 1ULL << (true_size - 1);
351 ullong_t result=(number >> shift)|((number<<revShift)&filter);
361 std::size_t true_size)
370 const ullong_t filter = 1ULL << (true_size - 1);
371 ullong_t result=((number<<shift)&filter)|((number&filter) >> revShift);