uint128_t 添加 c++ 重载类型强制转换
发布时间:2021-01-10 04:49:24 所属栏目:系统 来源:网络整理
导读:类型声明: 1 class uint128 2 { 3 public : 4 uint128() :hi( 0 ),lo( 0 ){} 5 uint128(uint32_t l) :hi( 0 ),lo(l){} 6 uint128(int32_t l) :hi(-(l 0 )),lo(l){} 7 uint128(int64_t l) :hi(-(l 0 )),lo(l){} 8 uint128(uint64_t l) :hi( 0 ),lo(l){} 9 ui
|
副标题[/!--empirenews.page--]
类型声明: 1 class uint128
2 {
3 public:
4 uint128() :hi(0),lo(0){}
5 uint128(uint32_t l) :hi(0),lo(l){}
6 uint128(int32_t l) :hi(-(l < 0)),lo(l){}
7 uint128(int64_t l) :hi(-(l < 0)),lo(l){}
8 uint128(uint64_t l) :hi(0),lo(l){}
9 uint128(const std::string& s);
10 uint128(uint64_t _h,uint64_t _l)
11 :hi(_h),lo(_l){}
12
13
14 bool operator == (const uint128& o)const{ return hi == o.hi && lo == o.lo; }
15 bool operator != (const uint128& o)const{ return hi != o.hi || lo != o.lo; }
16 bool operator < (const uint128& o)const { return (hi == o.hi) ? lo < o.lo : hi < o.hi; }
17 bool operator < (const int64_t& o)const { return *this < uint128(o); }
18 bool operator !()const { return !(hi != 0 || lo != 0); }
19 uint128 operator -()const { return ++uint128(~hi,~lo); }
20 uint128 operator ~()const { return uint128(~hi,~lo); }
21
22 uint128& operator++() { hi += (++lo == 0); return *this; }
23 uint128& operator--() { hi -= (lo-- == 0); return *this; }
24 uint128 operator++(int) { auto tmp = *this; ++(*this); return tmp; }
25 uint128 operator--(int) { auto tmp = *this; --(*this); return tmp; }
26
27 uint128& operator |= (const uint128& u) { hi |= u.hi; lo |= u.lo; return *this; }
28 uint128& operator &= (const uint128& u) { hi &= u.hi; lo &= u.lo; return *this; }
29 uint128& operator ^= (const uint128& u) { hi ^= u.hi; lo ^= u.lo; return *this; }
30 uint128& operator <<= (const uint128& u);
31 uint128& operator >>= (const uint128& u);
32
33 uint128& operator += (const uint128& u) { const uint64_t old = lo; lo += u.lo; hi += u.hi + (lo < old); return *this; }
34 uint128& operator -= (const uint128& u) { return *this += -u; }
35 uint128& operator *= (const uint128& u);
36
37
38 friend uint128 operator + (const uint128& l,const uint128& r) { return uint128(l) += r; }
39 friend uint128 operator + (const uint128& l,const uint64_t& r) { return uint128(l) += uint128(r); }
40 friend uint128 operator + (const uint128& l,const uint32_t& r) { return uint128(l) += uint128(r); }
41 friend uint128 operator + (const uint128& l,const int32_t& r) { return uint128(l) += uint128(r); }
42 friend uint128 operator + (const uint64_t& l,const uint128& r) { return uint128(l) += r; }
43 friend uint128 operator - (const uint128& l,const uint128& r) { return uint128(l) -= r; }
44 friend uint128 operator * (const uint128& l,const uint128& r) { return uint128(l) *= r; }
45 friend uint128 operator * (const uint128& l,const uint64_t& r) { return uint128(l) *= uint128(r); }
46 friend uint128 operator * (const uint128& l,const uint32_t& r) { return uint128(l) *= uint128(r); }
47 friend uint128 operator | (const uint128& l,const uint128& r) { return uint128(l) = (r); }
48 friend uint128 operator & (const uint128& l,const uint128& r) { return uint128(l) &= r; }
49 friend uint128 operator & (const uint128& l,const uint64_t& r) { return uint128(l) &= uint128(r); }
50 friend uint128 operator ^ (const uint128& l,const uint128& r) { return uint128(l) ^= r; }
51 friend uint128 operator << (const uint128& l,const uint128& r) { return uint128(l) <<= r; }
52 friend uint128 operator >> (const uint128& l,const uint128& r) { return uint128(l) >>= r; }
53 friend uint128 operator >> (const uint128& l,const int32_t& r) { return uint128(l) >>= uint128(r); }
54 friend bool operator > (const uint128& l,const uint128& r) { return r < l; }
55 friend bool operator >(const uint128& l,const int64_t& r) { return uint128(r) < l; }
56 friend bool operator > (const int64_t& l,const uint128& r) { return r < uint128(l); }
57
58 friend bool operator >= (const uint128& l,const uint128& r) { return l == r || l > r; }
59 friend bool operator >= (const uint128& l,const int64_t& r) { return l >= uint128(r); }
60 friend bool operator >= (const int64_t& l,const uint128& r) { return uint128(l) >= r; }
61 friend bool operator <= (const uint128& l,const uint128& r) { return l == r || l < r; }
62 friend bool operator <= (const uint128& l,const int64_t& r) { return l <= uint128(r); }
63 friend bool operator <= (const int64_t& l,const uint128& r) { return uint128(l) <= r; }
64
65 operator uint64_t() { return lo; } //强制转换为uint64_t
66 operator uint32_t() { return (uint32_t)lo; } //强制转换为uint32_t
67 operator int32_t() { return (int32_t)lo; } //强制转换为int32_t
68
69
70 uint32_t low_32_bits()const { return (uint32_t)lo; }
71 uint64_t low_bits()const { return lo; }
72 uint64_t high_bits()const { return hi; }
73
74 uint64_t hi;
75 uint64_t lo;
76 };
? (编辑:清远站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |

