utilities(C/C++)
2016-01-23 21:42
375 查看
swap 的另一种实现
int max, min; n > m ? (max = n, min = m):(max = m, min = n); // 此时的三目运算符不在等号右侧,用于赋值,而是做一些操作
十进制的小数形式(单精度、双精度)与 IEEE 754 下的二进制形式的相互转化
IEEE 754——计算机中浮点数的表示方法std::bitset<32> float2bits(float n) { _ULonglong nMem = *(unsigned __int64*)&n; return std::bitset<32>(nMem); } std::bitset<64> double2bits(double n) { _ULonglong nMem = *(unsigned __int64*)&n; return std::bitset<64>(nMem); } float bits2float(std::bitset<32>& bs) { return *(float*)&bs; } double bits2double(std::bitset<64>& bs) { return *(double*)&bs; }
hashString
unsigned long cryptTable[0x500]; void prepareCryptTable() { unsigned long idx1, idx2, k; unsigned long step = 0x100, n = 5; unsigned long seed = 0x00100001; for (idx1 = 0; idx1 < step; ++idx1) { for (idx2 = idx1, k = 0; k < 5; ++k, idx2 += step) { unsigned long tmp1, tmp2; seed = (seed * 125 + 3) % 0x2aaaab; tmp1 = (seed & 0xffff) << 0x10; seed = (seed * 125 + 3) % 0x2aaaab; tmp2 = (seed & 0xffff); cryptTable[idx2] = (tmp1 | tmp2); } } } unsigned long hashString(char* lpszFileName, unsigned long dwHashType) { unsigned char* key = (unsigned char*)lpszFileName; unsigned long seed1 = 0x7fed7fed, seed2 = 0xeeeeeeee; int ch; while (*key) { ch = toupper(*key++); seed1 = cryptTable[(dwHashType << 8) + ch] ^ (seed1 + seed2); seed2 = ch + seed1 + seed2 + (seed2 << 5) + 3; } return seed1; }
解释说明见 十一、从头到尾解析Hash表算法。
相关文章推荐
- C++类静态成员初始化
- 小蚂蚁学习C语言(35)——两行三列二维数组变三行两列二维数组
- 常见算法:C语言求最小公倍数和最大公约数三种算法
- C语言 hdoj1002
- C/C++中volatile关键字详解
- c++的那些坑--运算符优先级
- 全局变量引发的链接时的LNK2005xxx already defined in yyyy.obj
- c++中类对象分配内存大小与虚继承的一些问题
- 【C语言】写一个函数,实现字符串内单词逆序
- 用VLFeat库进行SIFT特征提取(C++ 实现)
- 1023. Have Fun with Numbers (20)
- HDU-1032-The 3n + 1 problem(C++&学英语&水题)
- c++企业级接口框架(二)
- 库函数的认识及 C/C++常用 api 及基本库
- 1084. Broken Keyboard (20)
- GCC 下 tranform 调用 toupper, tolower 出错原因及解决
- C++学习笔记(二) bool const 和 #define 结构体内存对齐
- 编程学习笔记之c++相关::模板元的学习
- C++ memcpy()函数用法
- C++ static关键字