自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(32)
  • 收藏
  • 关注

原创 仿射坐标公式推导

2014-08-14 17:39:52 1630

原创 C++11 多线程

新特性之描述:虽然 C++11 会在语言的定义上提供一个内存模型以支持线程,但线程的使用主要将以 C++11 标准库的方式呈现。C++11 标准库会提供类型 thread (std::thread)。若要运行一个线程,可以创建一个类型 thread 的实体,其初始参数为一个函数对象,以及该函数对象所需要的参数。通过成员函数 std::thread::join() 对线程会合的支持,一个线程

2013-06-19 14:16:04 4117

转载 算术移位与逻辑移位有什么区别?

逻辑移位(不管是左移位还是右移位)   都是空缺处补0         例如:     mov   ax   ,   1100_0111_0110_1000B                     mov   cl   ,   3                     shl   ax   ,   cl                                     ;

2013-03-26 20:28:51 1526

转载 堆排序

#define HEAP_SWAP(a,b) \ do \ {\ int t = a;\ a = b;\ b = t;\ } while (0);// array是待调整的堆数组,i是待调整的数组元素的位置,nlength是数组的长度void HeapAdjust(int array[],int i,int nLength)//本函数功能是:根据数组array构建大根堆{

2012-06-28 15:14:43 601

原创 内存泄露打印new和delete重载

#define TRACE_MEM #ifdef TRACE_MEM#define MEM_NEW new(__FILE__, __LINE__)#define MEM_DELETE delete#else#define MEM_NEW new#define MEM_DELETE delete#endif#ifdef TRACE_MEMinline void * __cdec

2012-06-01 18:05:50 490

原创 凸包

CPoint basicXY;// 查找基准点CPoint CH_FindBasicPoint(std::list& ptSet){ float tempX = 0.0f; float tempY = 0.0f; std::list::iterator pt = ptSet.begin();; tempX = pt->x; tempY = pt->y; // 先找到最小Y

2011-12-23 21:35:20 409

原创 曲面重复纹理填充

#include #include #include GLfloat ctrlpoints[2][3][3] = { {{-1.5,0,0.0},{0,1,0.0},{3,0,0.0}}, {{-1.5,-2,0.0},{0,-3,0.0},{3,-2,0.0}}};GLfloat texpts[2][2][2] = {{{0.0, 0.0}, {0.0, 20.0}},

2011-12-14 15:40:29 1212

转载 线段树

1、概述线段树,也叫区间树,是一个完全二叉树,它在各个节点保存一条线段(即“子数组”),因而常用于解决数列维护问题,它基本能保证每个操作的复杂度为O(lgN)。2、线段树基本操作线段树的基本操作主要包括构造线段树,区间查询和区间修改。(1)    线段树构造首先介绍构造线段树的方

2011-07-28 15:20:55 1381

原创 位操作

<br />#include "stdio.h"#include "stdlib.h"/*--------------------------------------------------------------位操作假设你工作在一个32位的机器上,你需要将某一个外设寄存器的第X位设置成0(最低位为第0位,最高位为第31位),将第Y位开始的连续三位设置成110(从高位到低位的顺序),而其他位保持不变。对给定的寄存器值R,及X,Y,编程计算更改后的寄存器值R。Input

2010-12-31 10:42:00 709

原创 大整数乘法

#include "stdio.h"#include "stdlib.h"#include "string.h"/*----------------------------------------------大整数乘法在计算机中,长整型(long int)变量的范围是 -2147483648 至 2147483647,因此若用长整型变量做乘法运算,乘积最多不能超过 10位数。即便用双精度型(double)变量,也仅能保证 16 位有效数字的精度。在某些需要更高精度的乘法运

2010-12-30 11:28:00 525

原创 蛇行矩阵

<br />#include <iostream>using namespace std;/*---------------------------------------------------------蛇行矩阵Problem蛇形矩阵是由1开始的自然数依次排列成的一个矩阵上三角形。Input本题有多组数据,每组数据由一个正整数N组成。(N不大于100) Output对于每一组数据,输出一个N行的蛇形矩阵。两组输出之间不要额外的空行。 矩阵三角中同一行的数

2010-12-29 15:48:00 553

原创 母牛生小牛[特殊的斐波那契数列]

<br />#include <iostream>#include "windows.h"using namespace std;/*-----------------------------------母牛生小牛Problem设有一头小母牛,从出生第四年起每年生一头小母牛,按此规律,第N年时有几头母牛? Input本题有多组数据。每组数据只有一个整数N,独占一行。(1≤N≤50) Output对每组数据,输出一个整数(独占一行)表示第N年时母牛的数量

2010-12-28 14:49:00 980

原创 指针与引用的区别

<br /><br />1.引用是对象的一个别名<br />int   a = 1;<br />int& b = a;<br />b引用了a,b是a的一个别名<br /> <br />2.不能有NULL引用,引用必须与合法的存储单元关联(指针则可以是NULL)<br />int& a = NULL; //错误<br />int* b = NULL;//正确<br /> <br />3.引用被创建的同时必须被初始化,一旦引用被初始化,就不能改变引用的关系(指针则可以随时改变所指的对象)<br />以下示例程序

2010-12-13 16:32:00 296

原创 符号位

PF是奇偶标志 AF是辅助进位标志 ZF是零标志 SF是符号标志 CF:(carry Flag)进位标记,指两进制补码算法产生了进位,也就是最高位,无符号  附注:AF是BCD的进位标记OF:(Overflow Flag)溢出标记,指数值过大溢出了,有符号有“数值”含义,有符号“进位与符号无关,溢出与符号有关

2010-11-22 17:21:00 1627

原创 ENTER 和 LEAVE

 释放当前子程序在堆栈中的局部变量,使BP和SP恢复成最近一次的ENTER指令被执行前的值。ENTER指令相当于PUSH BPMOV BP,SP LEAVE相当于:MOV SP,BPPOP BP

2010-10-09 17:10:00 481

原创 标志位详解

进位标志CF(Carry Flag)的定义:当加减运算结果的最高有效位有进位(加法)或借位(减法)时,将设置进位标志为1,即CF=1;如果没有进位或借位,则设置进位标志为0,即CF=0。这是说,处理器执行一个加法或者减法指令,对两个数据进行了相加或者相减,除了一个和值或者一个差值外;如果出现最高位的进位或者借位,在标志寄存器中的这个进位标志CF位就被处理器设置成为1。假设处理器执行二进制8位数据加法指令,实现8位二进制数:00111010和01111100相加。运算结果是:1011011

2010-09-20 10:58:00 2426

原创 内存池实现

/** C内存池实现代码 * 作者:WDL* 出处:http://blog.csdn.net/wuleibilly3* 转载请注明本博客*///内存池typedef struct _MemTable MemTable;typedef struct _MemPool MemPool;typedef struct _MemNode MemNode;typedef struct _CheckAvail CheckAvail;#define MIN_M

2010-09-17 16:31:00 423

原创 字符串哈希函数

字符串哈希函数  (著名的ELFhash算法)int ELFhash(char *key) { unsigned long h=0;  while(*key)  { h=(h unsigned long g=h&0Xf0000000L;  if(g) h^=g>>24;  h&=~g;  }  return h%MOD; }

2010-09-13 12:02:00 360

原创 CMP详解

cmp(compare)指令进行比较两个操作数的大小例:cmp oprd1,oprd2它影响flag的CF,ZF,OF,AF,PF我们怎么判断大小呢?若执行指令后ZF=1 这个简单,则说明两个数相等,因为zero为1说明结果为0当无符号时:若    CF=1 则说明了有进位或借位,cmp是进行的减操作,故可以看出为借位,所以,此时oprd1CF=0 则说明了无借位,但此时要注意ZF是否为0,若为0,则说明结果不为0,故此时oprd1>oprd2当有符号时:若SF=0,OF=0 则说明了此时的值为正数,没有溢

2010-09-02 14:40:00 2377

转载 指令: JO、JNO、JB、JNB、JE、JNE、JBE、JA、JS、JNS、JP、JNP、JL

名称   功能  操作数 操作码 模数 寄存器1 寄存器2或内存 位移量 立即数 符号 方向 芯片型号 16位 32位 JO 溢出跳转 短  $70 无 无 无 无 10 无 无 8086 无 无 JNO 不溢出跳转 短  $71 无 无 无 无 10 无 无 8086 无 无 JB 低于跳转 短  $72 无 无 无 无 10 无 无 8086 无 无 JNB 不低于跳转 短  $73 无 无 无 无 10 无 无 8086 无 无 JE 相等跳转 短  $74 无 无 无 无 10 无 无 8086 无

2010-08-27 10:51:00 4059

原创 避免内存碎片的小技巧

建立一个结构体里面包含一个指针用来存放数据。最初的定义是这样的typedef struct _NODE{    char *pData;    int nLength;} Node;使用的时候:Node *pNode = (Node*)malloc(sizeof(Node));pNode->Data = (char*)malloc(pNode->nLength);这样是没有任何问题的,但是却有内存碎片的产生,本来这个pNode 和 p->Data就是一起用的,所以最好分配到一个内存的地方。解决办法:type

2010-08-25 19:06:00 412

转载 C++函数参数中的省略号

C++允许定义形参个数和类型不确定的函数。例如,C语言中的标准函数printf便使用这种机制。在声明不确定形参的函数时,形参部分可以使用省略号“…”代替。“…”告诉编译器,在函数调用时不检查形参类型是否与实参类型相同,也不检查参数个数。例如:void ConnectData(int i,...)在上面的代码中,编译器只检查第一个参数是否为整型,而不对其他参数进行检查。对于可变参数的函数,需要进行特殊的处理。首先需要引用 头文件,然后利用va_list类型和va_start、va_arg、va_end 3个

2010-08-20 09:54:00 281

原创 C++四种类型转换

dynamic_cast:通常在基类和派生类之间转换时使用const_cast:常量转换成非常量static_cast:通用转换,转换时 会做必要的分析reinterpret_cast:不进行分析 直接将二进制数据 拷贝过去

2010-07-24 14:37:00 247

原创 比较字符串不区分大小写

int compareAb(const char* dst,const char* src){unsigned char s_tolowerTable[256];for(int i = 0; i     s_tolowerTable[i] = (unsigned char)tolower(i);//不区分大小写进行比较 知道完全匹配结束 或 中途不匹配结束for( ; *dst && *src && s_tolowerTable[(unsigned char)(*dst)] == s_t

2010-07-19 10:05:00 1097

原创 样条曲线

typedef struct _Point{ float x; float y;}Point;float Fac(int n){ if(n == 0) { return 1; } return n * Fac(n-1);}float pow(float x,int y){ if(y == 0) { return 1; } return x*pow(

2010-06-22 11:28:00 413

原创 使用宏技巧

技巧一:把枚举值转换成字符串#define CaseEnum(a) case(a):LogMsgToFile(#a,id,time)switch(msg_passed_in){    CaseEnum(MSG_YouWereHit);    ReactToHit();    break;} 技巧二:利用二进制表达式得到编译期常量#define cat(a,b)

2010-02-27 21:54:00 527

原创 通过进程名获取进程PID

/*用CreateToolhelp32Snapshot进行对系统所有进程进行快照,然后利用Process32First取得第一个进程句柄,然后把得到的PROCESSENTRY32结构体中的szExeFile就是进程名进行比较,利用Process32Next进行循环比较,具体用法看msdn,就可以得到进程句柄了,,,附上C/C++代码:*/#include#include#inclu

2009-07-29 06:25:00 11156 6

原创 多线程同步

#include #include #include   //缺少将出现error   C2039:   _beginthreadex   :   is   not   a   member   of   `global   namespace, long int one=0,two=0; CRITICAL_SECTION g_cs; UINT WINAPI Threahfun(LP

2009-07-29 06:21:00 896

原创 变速齿轮

/*变速齿轮原理是,游戏在刷新画面时会用到时钟来控制刷新速度,有过游戏开发的人都知道,一般游戏锁定1秒30帧,这样会很流畅,人眼有视觉停顿,当速度达到1秒16帧的时候,就是在跑动画了,游戏用到的计时器有大部分是两个windows提供的api函数,一个是::GetTickCount,一个是::timeGetTime,这两个api的原型请查msdn,我们利用hook api 去修改它的值,从而改变

2009-07-18 16:03:00 3462 1

原创 HOOK全局键盘钩子

/*******KeyHookLib.h文件*********/ // 定义函数修饰宏,方便引用本DLL工程的导出函数 #ifdef KEYHOOKLIB_EXPORTS #define KEYHOOKLIB_API __declspec(dllexport) #else #define KEYHOOKLIB_API __declspec(dllimport) #endif // 声明要导出的函数

2008-09-02 19:13:00 2191 1

原创 远程注入线程

#include #include #include #include using namespace std;class InjectionRemoteThread{public:    InjectionRemoteThread(const char *FileName,const char *DllName);    DWORD GetProcessID();             //获

2008-08-28 02:11:00 738

原创 通讯录管理程序

#include #include #include #include using namespace std;  //定义文件名#define FileName "data.txt" //定义循环变量bool mVal=true;     //定义个新的变量typedef string mData;typedef char mChar[50

2008-08-28 02:03:00 922

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除