加入收藏 | 设为首页 | 会员中心 | 我要投稿 威海站长网 (https://www.0631zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 服务器 > 系统 > 正文

uint128_t 添加 c++ 重载类型强制转换

发布时间:2021-01-10 12:50:53 所属栏目:系统 来源:网络整理
导读:类型声明: 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 };

?

(编辑:威海站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读