📄 spisakbitova.cpp
字号:
// SpisakBitova.cpp: implementation of the CSpisakBitova class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "SpisakBitova.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CSpisakBitova::CSpisakBitova()
: maskaZaSveBitove_m(0)
{
}
CSpisakBitova::~CSpisakBitova()
{
}
void CSpisakBitova::Dodaj(int bitMaska, int pozicija, bool pinInvertovan)
{
if (pozicija >= 0) {
spisakBitova_m.push_back(CBitDef(bitMaska, pozicija, pinInvertovan));
maskaZaSveBitove_m |= bitMaska;
}
}
int CSpisakBitova::FormirajMaskuZaSveBitove(void)
{
return maskaZaSveBitove_m;
}
int CSpisakBitova::PozicijaBita(int bitMaska)
{
int pozicija = 0;
CBitDef bitDef;
if (DajBitDef(bitMaska, bitDef)) {
pozicija = bitDef.pozicija;
}
return pozicija;
}
bool CSpisakBitova::PinInvertovan(int bitMaska)
{
bool invertovan = false;
CBitDef bitDef;
if (DajBitDef(bitMaska, bitDef)) {
invertovan = bitDef.pinInvertovan;
}
return invertovan;
}
int CSpisakBitova::IzdvojiMaskuZaBitSaNajnizomPozicijom(int bitMaska)
{
int maska = 0;
int minPoz = INT_MAX;
tSpisakBitova::const_iterator spisakEnd = spisakBitova_m.end();
for (tSpisakBitova::const_iterator b_iter = spisakBitova_m.begin(); b_iter != spisakEnd; ++b_iter) {
if ((*b_iter).bitMaska & bitMaska) {
if ((*b_iter).pozicija < minPoz){
maska = (*b_iter).bitMaska;
minPoz = (*b_iter).pozicija;
}
}
}
return maska;
}
void CSpisakBitova::InvertujPinoveSaInverznomLogikom(int& sadrzaj)
{
tSpisakBitova::const_iterator spisakEnd = spisakBitova_m.end();
for (tSpisakBitova::const_iterator b_iter = spisakBitova_m.begin(); b_iter != spisakEnd; ++b_iter) {
if ((*b_iter).pinInvertovan) {
sadrzaj ^= (0x01 << ((*b_iter).pozicija)); // XOR sa 1 je negacija
}
}
}
//////////////////////////////////////////////////////////////////////
// Pomocne funkcije
//////////////////////////////////////////////////////////////////////
bool CSpisakBitova::DajBitDef(int bitMaska, CBitDef& bitDef)
{
bool bNaso = false;
tSpisakBitova::const_iterator spisakEnd = spisakBitova_m.end();
for (tSpisakBitova::iterator b_iter = spisakBitova_m.begin(); b_iter != spisakEnd; ++b_iter) {
if ((*b_iter).bitMaska == bitMaska) {
bitDef = (*b_iter);
bNaso = true;
break;
}
}
return bNaso;
}
void CSpisakBitova::PostaviParametre(int pomeraj)
{
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -