亚洲欧美第一页_禁久久精品乱码_粉嫩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一区二区三区免费野_久草精品视频
国产欧美视频一区二区| 国产在线精品免费av| 99久久精品免费| 日韩一区日韩二区| 波多野结衣一区二区三区 | av中文一区二区三区| 欧美经典一区二区三区| 成人免费视频caoporn| 亚洲男人天堂一区| 5月丁香婷婷综合| 亚洲一二三专区| 欧美一卡二卡三卡| 国产白丝网站精品污在线入口| 国产精品成人免费精品自在线观看| 色成年激情久久综合| 六月丁香婷婷久久| 久久久久久日产精品| 91蝌蚪国产九色| 精品综合免费视频观看| 亚洲宅男天堂在线观看无病毒| 欧美va亚洲va香蕉在线| 欧美羞羞免费网站| 国产一区二区在线看| 依依成人综合视频| 中文字幕一区二区在线播放| 69精品人人人人| 欧美四级电影在线观看| 成人精品视频一区| 美国一区二区三区在线播放| 夜夜嗨av一区二区三区中文字幕| 国产亚洲欧美激情| 国产欧美一区二区精品性色| 日韩一级欧美一级| 欧美精选在线播放| 国产精品亚洲人在线观看| 蜜桃久久av一区| 免费看欧美女人艹b| 日本不卡一二三| 狠狠色2019综合网| 国产一区二区三区免费观看| 日本成人在线视频网站| 乱中年女人伦av一区二区| 国产精品资源网| 不卡在线视频中文字幕| 色综合天天天天做夜夜夜夜做| 97精品国产露脸对白| 国产成人免费在线观看不卡| 国产福利一区二区三区视频在线 | 色婷婷综合久久久久中文一区二区 | 欧美日韩一区成人| 国产日产亚洲精品系列| 国产日产欧美一区| 一区二区三区高清不卡| 日本怡春院一区二区| 日本不卡一二三| 成a人片亚洲日本久久| 欧美精品免费视频| 国产欧美视频在线观看| 亚洲超碰97人人做人人爱| 日本不卡视频在线观看| 在线国产亚洲欧美| 中国色在线观看另类| 性做久久久久久久免费看| 精品一区二区三区欧美| 欧美日韩在线综合| 久久精品日韩一区二区三区| 亚洲精品精品亚洲| 韩国精品主播一区二区在线观看 | 欧美大片国产精品| 国产欧美在线观看一区| 肉色丝袜一区二区| 成人av网站大全| 国产色婷婷亚洲99精品小说| 蜜臀av性久久久久蜜臀aⅴ四虎| 欧美综合在线视频| 亚洲久本草在线中文字幕| 国产成人免费在线观看不卡| 国产精品资源站在线| 欧美色中文字幕| 亚洲伦在线观看| 成人h动漫精品一区二| 亚洲少妇30p| 99精品视频一区| 国产精品久久久久久久久免费桃花| 精品一区二区免费在线观看| 国产精品日日摸夜夜摸av| 国产福利不卡视频| 最近日韩中文字幕| 在线看日韩精品电影| 蜜臀va亚洲va欧美va天堂| 久久夜色精品国产欧美乱极品| 捆绑调教一区二区三区| 国产日产欧美一区二区视频| 成人18视频在线播放| 午夜免费久久看| 精品卡一卡二卡三卡四在线| 高清国产午夜精品久久久久久| 亚洲同性同志一二三专区| 91国内精品野花午夜精品| 美女视频黄 久久| 亚洲欧美一区二区三区极速播放| 91免费观看国产| 九九视频精品免费| 亚洲日本在线视频观看| 欧美电影免费观看完整版| 99视频国产精品| 美女网站色91| 亚洲免费在线观看| 久久久久久久久99精品| 色域天天综合网| 国产精品一区二区在线观看网站| 亚洲天堂av一区| 亚洲视频在线观看三级| 国产精品日产欧美久久久久| 欧美日韩国产综合久久| 色综合久久88色综合天天| 日韩av一级电影| 亚洲欧美区自拍先锋| 中文字幕欧美区| 亚洲超碰97人人做人人爱| 亚洲国产日韩在线一区模特| 亚洲欧美电影一区二区| 亚洲一区二区在线观看视频| 一区二区三区四区不卡视频| 亚洲综合在线免费观看| 亚洲精品国产一区二区三区四区在线| 亚洲视频狠狠干| 日韩国产精品大片| 国产福利一区二区| 色婷婷综合久久久中文一区二区| 在线亚洲免费视频| 91精品国产一区二区三区蜜臀| 色婷婷av久久久久久久| 制服丝袜av成人在线看| 中文一区二区完整视频在线观看 | 午夜精品一区二区三区电影天堂| 国产精品成人免费精品自在线观看| 日韩欧美一区中文| 亚洲色图19p| 激情综合色综合久久| caoporn国产一区二区| 91麻豆精品国产91久久久更新时间| 久久久久久99精品| 青青草国产精品亚洲专区无| www.日韩大片| 这里只有精品电影| 亚洲午夜久久久久久久久电影院| 激情六月婷婷综合| 7777精品伊人久久久大香线蕉最新版 | 国产成+人+日韩+欧美+亚洲| 日韩美女主播在线视频一区二区三区| 中文字幕一区免费在线观看| 精品一区二区三区日韩| 欧美偷拍一区二区| 亚洲一级二级三级在线免费观看| av在线一区二区| 久久九九99视频| 精品一区二区三区视频在线观看| 69堂国产成人免费视频| 亚洲第一搞黄网站| 在线观看91av| 久久av老司机精品网站导航| 欧美大片日本大片免费观看| 午夜av电影一区| 日韩一级片在线观看| 国产盗摄一区二区三区| 国产亚洲一区二区在线观看| 日本亚洲天堂网| 中文字幕av不卡| 欧美人妖巨大在线| 国产在线一区二区综合免费视频| 久久中文字幕电影| 色哟哟国产精品| 中文字幕+乱码+中文字幕一区| 国产91在线|亚洲| 日韩国产精品久久| 国产精品国产自产拍在线| 欧美在线|欧美| 福利一区二区在线| 婷婷六月综合网| 欧美激情一区在线| 在线欧美一区二区| 日韩1区2区3区| 亚洲蜜桃精久久久久久久| 欧美日韩一区小说| 日一区二区三区| 亚洲精品视频一区二区| 欧美日韩在线播放三区四区| 福利电影一区二区| 久久精品国产网站| 亚洲精品老司机| 中文成人av在线| 国产偷国产偷精品高清尤物| 欧美美女直播网站| 日本韩国欧美国产| 99re8在线精品视频免费播放| 精品中文字幕一区二区| 麻豆精品视频在线观看免费| 午夜精品福利视频网站| 天天操天天干天天综合网|