:言葉の前に書かれた
卒業生からの著者は、多くのゲームや研究・交流へのすべてのための実用的なケースモジュールのコードを、ゲーム開発に携わってきました、知識が質問があれば、グループを追加してください641 792 143交流や学習、いくつかの助けを持って来ることを願って
#define MAKEINT16(a, b) ((uint16_t)(((uint8_t)((uint16_t)(a) & 0xff)) | ((uint16_t)((uint8_t)((uint16_t)(b) & 0xff))) << 8))
#define MAKEINT32(a, b) ((uint32_t)(((uint16_t)((uint32_t)(a) & 0xffff)) | ((uint32_t)((uint16_t)((uint32_t)(b) & 0xffff))) << 16))
// 判断数字的某位是否为1,idx从0~31
bool bitOPMask(int val, int idx)
{
if (idx < 0 || idx >= 32)
{
return false;
}
val = (val >> idx) & 0x01;
return val == 1;
}
// 取反
int bitOpNot(int val)
{
return ~val;
}
// 位与
int bitOpAnd(int val1, int val2)
{
return val1 & val2;
}
//位或
int bitOpOr(int val1, int val2)
{
return val1 | val2;
}
// 位右移
int bitOpRig(int val, int cnt)
{
return val >> cnt;
}
// 位左移
int bitOpLeft(int val, int cnt)
{
return val << cnt;
}
// 把数字对应的位变成1
int bitOpSetMask(int val, int idx, bool flag)
{
if (idx < 0 || idx >= 32)
{
return val;
}
unsigned int mask = (1 << idx);
if (flag)
{
val |= mask;
}
else
{
// 变成0
mask = ~mask;
val &= mask;
}
return val;
}
/*
* Comments: 把32位整形数第nBitPos位置nNum (bBit为true时置1,否则置0)
* Param unsigned int nValue: 32位整形数
* Param unsigned int nBitPos: 置位位数
* Param bool bBit: 置位数
* @Return int: 成功则 返回置位后的整形数,否则返回-1
*/
int setIntBit(unsigned int nValue, unsigned int nBitPos, bool bBit)
{
if (nBitPos >= (32)) return -1;
unsigned int newValue;
if (bBit)
{
newValue = (unsigned int)(0x1 << nBitPos);
nValue |= newValue;
}
else
{
newValue = (unsigned int)(~(0x1 << nBitPos));
nValue &= newValue;
}
return nValue;
}
/*
* Comments: 判断32位整形数nBitPos位是为0/1
* Param unsigned int nValue: 整形数
* Param unsigned int nBitPos: 位数
* @Return int:
*/
int getIntBit(unsigned int nValue, unsigned int nBitPos)
{
if (nBitPos >= (32)) return -1;
return (nValue & (0x1 << nBitPos)) ? true : false;
}
//获取该值中一个有多少个1 或0 flag = true 计算1的数量
int getIntBitCount(unsigned int nValue,bool flag = true)
{
int count = 0;
for (unsigned int i = 0; i < 32; i++)
{
if ((1 << i)&nValue)
{
count += 1;
}
}
return flag ? count:(32-count);
}
// 根据4个字节的数字合并成一个int32,b1到b4分别是低位-高位,注意每个数字不能超过256
int int32Byte(int b1, int b2, int b3, int b4)
{
return MAKEINT32(MAKEINT16(b1, b2), MAKEINT16(b3, b4));
}