uint128_t 添加 c++ 重载类型强制转换
发布时间:2021-01-11 23:44:28 所属栏目:系统 来源:网络整理
导读:类型声明: 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 }; ? (编辑:晋中站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |