亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? int96.cpp

?? 一個很棒的大數運算類
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
/*
Module : INT96.CPP
Purpose: Implementation for an 96 bit integer class
Created: PJN / 26-04-1999
History: PJN / 17-10-1999 1. Fix for the function FormatAsDecimal which was
                          failing when the number starts with a "10".
         PJN / 26-10-1999 1. Fixed bug in operator!=
                          2. Fixed bug in operator^
                          3. Fixed bug in operator| 
                          4. Fixed bug in operator&
                          5. All relational and equality operators now return
                          "int" instead of BOOL
                          6. Provision of operators which convert back to
                          basic C types.
                          7. Improved the performance of operator*
                          8. Fixed problem with 0/0 which was returning 0 
                          instead of the correct value undefined i.e. divide 
                          by 0 exception
         PJN / 28-10-1999 1. Fixed another bug in operator!=
                          2. removed the use of MAXDWORD and replaced with 0xFFFFFFFF
         PJN / 14-11-1999 1. Fixed a bug in operator*
         

Copyright (c) 1999 by PJ Naughter.  
All rights reserved.

*/

///////////////////////////////// Includes //////////////////////////////////
#include "stdafx.h"
#include "int96.h"


///////////////////////////////// Defines ///////////////////////////////////

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif


//////////////////////////////// implementation /////////////////////////////

CInt96::CInt96()
{
  m_MSB = 0;
  m_CSB = 0;
  m_LSB = 0;
}

CInt96::CInt96(unsigned short value)
{
  m_MSB = 0;
  m_CSB = 0;
  m_LSB = value;
}

CInt96::CInt96(unsigned int value)
{
  m_MSB = 0;
  m_CSB = 0;
  m_LSB = value;
}

CInt96::CInt96(unsigned long value)
{
  m_MSB = 0;
  m_CSB = 0;
  m_LSB = value;
}

CInt96::CInt96(const unsigned __int64& value)
{
  m_MSB = 0;
  m_CSB = (DWORD) ((value >> 32) & 0xFFFFFFFF);
  m_LSB = (DWORD) (value & 0xFFFFFFFF);
}

CInt96::CInt96(short value)
{
  if (value < 0)
  {
    *this = CInt96((unsigned short)-value);
    TwosComplement();
  }
  else
  {
    m_MSB = 0;
    m_CSB = 0;
    m_LSB = value;
  }
}

CInt96::CInt96(int value)
{
  if (value < 0)
  {
    *this = CInt96((unsigned int)-value);
    TwosComplement();
  }
  else
  {
    m_MSB = 0;
    m_CSB = 0;
    m_LSB = value;
  }
}

CInt96::CInt96(long value)
{
  if (value < 0)
  {
    *this = CInt96((unsigned long)-value);
    TwosComplement();
  }
  else
  {
    m_MSB = 0;
    m_CSB = 0;
    m_LSB = value;
  }
}

CInt96::CInt96(const __int64& value)
{
  if (value < 0)
  {
    *this = CInt96((unsigned __int64)-value);
    TwosComplement();
  }
  else
  {
    m_MSB = 0;
    m_CSB = (DWORD) ((value >> 32) & 0xFFFFFFFF);
    m_LSB = (DWORD) (value & 0xFFFFFFFF);
  }
}

CInt96::CInt96(const CInt96& value)
{
  *this = value;
}

CInt96& CInt96::operator=(const CInt96& value)
{
  m_MSB = value.m_MSB;
  m_CSB = value.m_CSB;
  m_LSB = value.m_LSB;
  
  return *this;
}

CInt96 CInt96::operator+(const CInt96& value)
{
  CInt96 rVal;

  unsigned __int64 t = ((unsigned __int64)m_LSB) + ((unsigned __int64)value.m_LSB);
  int nCarry = (t > 0xFFFFFFFF);
  rVal.m_LSB = (DWORD) (t);

  t = ((unsigned __int64)m_CSB) + ((unsigned __int64)value.m_CSB) + nCarry;
  nCarry = (t > 0xFFFFFFFF);
  rVal.m_CSB = (DWORD) (t);

  t = ((unsigned __int64)m_MSB) + ((unsigned __int64)value.m_MSB) + nCarry;
  rVal.m_MSB = (DWORD) (t);

  return rVal;
}

CInt96 CInt96::operator-(const CInt96& value)
{
  CInt96 rVal;

  unsigned __int64 t = ((unsigned __int64)m_LSB) - ((unsigned __int64)value.m_LSB);
  int nCarry = (t > 0xFFFFFFFF);
  rVal.m_LSB = (DWORD) (t);

  t = ((unsigned __int64)m_CSB) - ((unsigned __int64)value.m_CSB) - nCarry;
  nCarry = (t > 0xFFFFFFFF);
  rVal.m_CSB = (DWORD) (t);

  t = ((unsigned __int64)m_MSB) - ((unsigned __int64)value.m_MSB) - nCarry;
  rVal.m_MSB = (DWORD) (t);

  return rVal;
}

CInt96 operator-(const CInt96& value)
{
  CInt96 rVal(value);
  rVal.operator~();

  return rVal;
}

CInt96& CInt96::operator++()
{
  *this = *this + CInt96(1);
  return *this;
}

CInt96& CInt96::operator--()
{
  *this = *this - CInt96(1);
  return *this;
}

CInt96& CInt96::operator*=(const CInt96& value)
{
  *this = *this * value;
  return *this;
}

CInt96& CInt96::operator/=(const CInt96& value)
{
  *this = *this / value;
  return *this;
}

CInt96& CInt96::operator+=(const CInt96& value)
{
  *this = *this + value;
  return *this;
}

CInt96& CInt96::operator-=(const CInt96& value)
{
  *this = *this - value;
  return *this;
}

CInt96 CInt96::operator~() const
{
  CInt96 rVal;

  rVal.m_MSB = ~m_MSB;
  rVal.m_CSB = ~m_CSB;
  rVal.m_LSB = ~m_LSB;

  return rVal;
}

void CInt96::Negate()
{
  if (IsPositive())
    TwosComplement();
  else
    InverseTwosComplement();
}

int CInt96::operator==(const CInt96& value) const
{
  return (m_MSB == value.m_MSB) && (m_CSB == value.m_CSB) && (m_LSB == value.m_LSB);
}

int CInt96::operator!=(const CInt96& value) const
{
  return (m_MSB != value.m_MSB) || (m_CSB != value.m_CSB) || (m_LSB != value.m_LSB);
}

int CInt96::operator>(const CInt96& value) const
{
  if (m_MSB > value.m_MSB)
    return TRUE;
  else if (m_MSB == value.m_MSB)
  {
    if (m_CSB > value.m_CSB)
      return TRUE;
    else if (m_CSB == value.m_CSB)
      return (m_LSB > value.m_LSB);
    else
      return FALSE;
  }
  else 
    return FALSE;
}

int CInt96::operator>=(const CInt96& value) const
{
  return operator>(value) || operator==(value);
}

int CInt96::operator<(const CInt96& value) const
{
  if (m_MSB < value.m_MSB)
    return TRUE;
  else if (m_MSB == value.m_MSB)
  {
    if (m_CSB < value.m_CSB)
      return TRUE;
    else if (m_CSB == value.m_CSB)
      return (m_LSB < value.m_LSB);
    else
      return FALSE;
  }
  else 
    return FALSE;
}

int CInt96::operator<=(const CInt96& value) const
{
  return operator<(value) || operator==(value);
}

BOOL CInt96::IsZero() const
{
  return (m_MSB == 0) && (m_CSB == 0) && (m_LSB == 0);
}

void CInt96::Zero()
{
  m_MSB = 0;
  m_CSB = 0;
  m_LSB = 0;
}

BOOL CInt96::IsNegative() const
{
  return ((m_MSB & 0x80000000) != 0);
}

BOOL CInt96::IsPositive() const
{
  return ((m_MSB & 0x80000000) == 0);
}

void CInt96::Serialize(CArchive& ar)
{
  if (ar.IsLoading())
  {
    WORD wVersion;
    ar >> wVersion;

    ar >> m_MSB;
    ar >> m_CSB;
    ar >> m_LSB;
  }
  else
  {
    WORD wVersion = 0x100; //Version 1.
    ar << wVersion;

    ar << m_MSB;
    ar << m_CSB;
    ar << m_LSB;
  }
}

void CInt96::TwosComplement()
{
  m_MSB = ~m_MSB;
  m_CSB = ~m_CSB;
  m_LSB = ~m_LSB;
  operator++();
}

void CInt96::InverseTwosComplement()
{
  operator--();
  m_MSB = ~m_MSB;
  m_CSB = ~m_CSB;
  m_LSB = ~m_LSB;
}

CInt96 CInt96::operator>>(int nShift) const
{
  CInt96 rVal;

  if (nShift >= 0)
  {
    if (nShift == 32)
    {
      rVal.m_LSB = m_CSB;
      rVal.m_CSB = m_MSB;
      rVal.m_MSB = 0;
    }
    else if (nShift == 0)
    {
      rVal.m_LSB = m_LSB;
      rVal.m_CSB = m_CSB;
      rVal.m_MSB = m_MSB;
    }
    else if (nShift == 64)
    {
      rVal.m_LSB = m_MSB;
      rVal.m_CSB = 0;
      rVal.m_MSB = 0;
    }
    else if (nShift < 32)
    {
      rVal.m_MSB = (m_MSB >> nShift);
      rVal.m_CSB = (m_CSB >> nShift) | (m_MSB << (32 - nShift));
      rVal.m_LSB = (m_LSB >> nShift) | (m_CSB << (32 - nShift));
    }
    else if (nShift < 64)
    {
      rVal.m_MSB = 0;
      rVal.m_CSB = m_MSB >> (nShift-32);
      rVal.m_LSB = (m_CSB >> (nShift-32)) | (m_MSB << (64 - nShift));
    }
    else if (nShift < 96)
    {
      rVal.m_MSB = 0;
      rVal.m_CSB = 0;
      rVal.m_LSB = m_MSB >> (nShift-64);
    }
    else
    {
      rVal.m_LSB = 0;
      rVal.m_CSB = 0;
      rVal.m_MSB = 0;
    }
  }
  else if (nShift < 0)
    rVal.operator<<(-nShift);

  return rVal;
}

CInt96 CInt96::operator<<(int nShift) const
{
  CInt96 rVal;

  if (nShift >= 0)
  {
    if (nShift == 32)
    {
      rVal.m_LSB = 0;
      rVal.m_CSB = m_LSB;
      rVal.m_MSB = m_CSB;
    }
    else if (nShift == 0)
    {
      rVal.m_LSB = m_LSB;
      rVal.m_CSB = m_CSB;
      rVal.m_MSB = m_MSB;
    }
    else if (nShift == 64)
    {
      rVal.m_LSB = 0;
      rVal.m_CSB = 0;
      rVal.m_MSB = m_LSB;
    }
    else if (nShift < 32)
    {
      rVal.m_LSB = m_LSB << nShift;
      rVal.m_CSB = (m_CSB << nShift) | (m_LSB >> (32 - nShift));
      rVal.m_MSB = (m_MSB << nShift) | (m_CSB >> (32 - nShift));
    }
    else if (nShift < 64)
    {
      rVal.m_LSB = 0;
      rVal.m_CSB = m_LSB << (nShift-32);
      rVal.m_MSB = (m_CSB << (nShift-32)) | (m_LSB >> (64 - nShift));
    }
    else if (nShift < 96)
    {
      rVal.m_LSB = 0;
      rVal.m_CSB = 0;
      rVal.m_MSB = m_LSB << (nShift-64);
    }
    else
    {
      rVal.m_MSB = 0;
      rVal.m_CSB = 0;
      rVal.m_LSB = 0;
    }
  }
  else if (nShift < 0)
    rVal.operator>>(-nShift);

  return rVal;
}

CInt96& CInt96::operator>>=(int nShift)
{
  *this = (*this >> nShift);
  return *this;
}

CInt96& CInt96::operator<<=(int nShift)
{
  *this = (*this << nShift);
  return *this;
}

CInt96 CInt96::operator*(const CInt96& value) const
{
  CInt96 A(*this);
  CInt96 B(value);

  // Correctly handle negative values
  BOOL bANegative = FALSE;
  BOOL bBNegative = FALSE;
  if (A.IsNegative())
  {
    bANegative = TRUE;
    A.Negate();

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美日韩成人在线一区| 亚洲成人自拍网| 亚洲午夜一区二区| 国产露脸91国语对白| 欧美福利视频一区| 亚洲欧美日本在线| 国产精品自产自拍| 91精品国产91久久综合桃花| 亚洲天堂a在线| 成人久久久精品乱码一区二区三区| 制服丝袜成人动漫| 亚洲国产欧美在线| 91色porny| 亚洲欧美在线aaa| 成人一级片网址| 国产亚洲婷婷免费| 久久66热re国产| 精品日韩99亚洲| 免费人成精品欧美精品| 欧美少妇xxx| 亚洲一卡二卡三卡四卡五卡| 色哦色哦哦色天天综合| 亚洲美女偷拍久久| 91视频免费看| 亚洲愉拍自拍另类高清精品| 91浏览器在线视频| 一区二区三区久久| 欧美亚洲国产怡红院影院| 亚洲激情图片小说视频| 色婷婷av一区二区三区软件| 亚洲男人都懂的| 欧洲日韩一区二区三区| 午夜一区二区三区视频| 3d动漫精品啪啪一区二区竹菊| 肉色丝袜一区二区| 欧美一二三四区在线| 国产综合色在线视频区| 精品伦理精品一区| 国产·精品毛片| 亚洲欧美日韩国产中文在线| 在线观看日韩电影| 日本欧美一区二区三区乱码| 日韩女优电影在线观看| 国产精品主播直播| 17c精品麻豆一区二区免费| 欧美性感一区二区三区| 热久久国产精品| 久久色在线观看| 91一区二区三区在线观看| 午夜亚洲国产au精品一区二区| 日韩欧美精品三级| 成人综合在线视频| 一区二区三区精密机械公司| 欧美男人的天堂一二区| 国内国产精品久久| 亚洲乱码国产乱码精品精98午夜| 欧美久久久一区| 国产精品系列在线观看| 一区二区高清在线| 精品不卡在线视频| 91精品福利在线| 久久99精品国产91久久来源| 一区在线播放视频| 91精品国产综合久久久久久久| 欧美日韩在线综合| 国内外精品视频| 亚洲午夜久久久久久久久电影院| 精品国精品国产| 欧美在线观看你懂的| 精品一区二区影视| 亚洲小说欧美激情另类| 欧美变态tickle挠乳网站| 色综合婷婷久久| 久久99国产精品免费网站| 亚洲欧美精品午睡沙发| 久久久久久久久岛国免费| 欧美日本免费一区二区三区| 成人a免费在线看| 美腿丝袜亚洲三区| 亚洲一二三四久久| 中文字幕一区免费在线观看| 欧美一区二区三区免费| 色爱区综合激月婷婷| 国产成人aaa| 精品一区中文字幕| 午夜私人影院久久久久| 亚洲精选视频免费看| 国产欧美日韩精品一区| 欧美大片在线观看| 欧美伦理视频网站| 91精品办公室少妇高潮对白| av成人老司机| 成人免费视频caoporn| 狠狠网亚洲精品| 免费观看一级欧美片| 亚洲综合一区二区| 一区二区三区精品| 亚洲精品自拍动漫在线| 亚洲欧洲av一区二区三区久久| 国产三级一区二区| 亚洲精品在线免费播放| 日韩欧美亚洲另类制服综合在线 | 亚洲精品你懂的| 国产亚洲成aⅴ人片在线观看| 欧美一级欧美三级| 欧美一区二区三级| 欧美一卡二卡在线观看| 欧美美女视频在线观看| 欧美在线一区二区三区| 色噜噜狠狠一区二区三区果冻| 99国产精品久久久| 成人av在线播放网站| eeuss影院一区二区三区| 不卡av在线免费观看| 99精品欧美一区| 91啪亚洲精品| 欧美性淫爽ww久久久久无| 欧美自拍丝袜亚洲| 欧美三区免费完整视频在线观看| 欧美在线视频你懂得| 欧美日韩中文精品| 欧美一级免费大片| 精品成人一区二区| 日本一区二区成人| 亚洲精品国产高清久久伦理二区| 亚洲最色的网站| 视频一区二区三区在线| 九九在线精品视频| 成人永久免费视频| 色综合久久综合网欧美综合网| 欧美影院精品一区| 欧美高清性hdvideosex| 精品久久久久久无| 一区二区中文字幕在线| 亚洲成人tv网| 欧美久久久久免费| 亚洲精品在线观看视频| 中文字幕日韩一区| 天天亚洲美女在线视频| 国产麻豆成人精品| 色欧美88888久久久久久影院| 欧美精品少妇一区二区三区| 久久综合九色综合欧美98| 中文字幕一区二区日韩精品绯色| 午夜成人在线视频| 国产美女精品人人做人人爽| 色噜噜狠狠色综合中国| 欧美一二三四区在线| 亚洲手机成人高清视频| 蜜桃精品视频在线观看| 成人看片黄a免费看在线| 欧美精品久久天天躁| 中文字幕精品一区二区精品绿巨人| 亚洲无人区一区| 东方aⅴ免费观看久久av| 欧美综合在线视频| 欧美经典一区二区| 亚洲线精品一区二区三区八戒| 国产乱子伦一区二区三区国色天香| 91丝袜美腿高跟国产极品老师 | 欧美日韩一区二区在线视频| 久久九九影视网| 亚洲成人资源在线| www.99精品| 久久精品一区二区| 日本欧美一区二区三区乱码| 99re热这里只有精品免费视频| 日韩欧美精品在线| 午夜精品久久久久久| 9l国产精品久久久久麻豆| 欧美成人vr18sexvr| 亚洲第一搞黄网站| 91免费观看视频在线| 久久久久国产成人精品亚洲午夜| 日韩成人免费在线| 在线观看一区日韩| 亚洲视频一区二区免费在线观看| 国产一区二区三区四区五区美女 | 欧美日韩国产高清一区二区三区| 欧美激情一区二区三区蜜桃视频| 麻豆成人久久精品二区三区小说| 欧美色倩网站大全免费| 亚洲久本草在线中文字幕| 不卡高清视频专区| 欧美激情一二三区| 国产传媒一区在线| 久久精品一区二区三区四区| 国产在线播放一区| 精品日韩av一区二区| 久久国产精品一区二区| 日韩欧美一区二区久久婷婷| 石原莉奈一区二区三区在线观看| 欧美中文字幕一二三区视频| 亚洲激情自拍视频| 色婷婷综合久久久久中文一区二区| 中文字幕一区二区不卡| 99精品视频在线免费观看| 亚洲欧美偷拍另类a∨色屁股| 91色|porny| 午夜欧美大尺度福利影院在线看|