·范围判断
bool Range_isOK(int goal, int min, int max)
{
return (unsigned) (goal - min) < (max - min);
}
·不用第三个变量,交换两个数
void MySwap(int* a, int* b)
{
if (*a == *b) return;
*a ^= *b;
*b ^= *a;
*a ^= *b;
}
·判断数据类型
#include <iostream>
enum
{
MORN_TYPE_U8,
MORN_TYPE_S8,
MORN_TYPE_U16,
MORN_TYPE_S16,
MORN_TYPE_U32,
MORN_TYPE_S32,
MORN_TYPE_F32,
MORN_TYPE_S64,
MORN_TYPE_D64,
};
int morn_data_type;
char morn_data_buff[8];
#define mDataType(P) (\
memcpy(morn_data_buff,(P),sizeof((P)[0])),\
(P)[0]=-1,\
morn_data_type=(sizeof((P)[0])==1)?(((int64_t)((P)[0])!=-1)?MORN_TYPE_U8 :MORN_TYPE_S8 ):(\
(sizeof((P)[0])==2)?(((int64_t)((P)[0])!=-1)?MORN_TYPE_U16:MORN_TYPE_S16):(\
(sizeof((P)[0])==4)?((*((int32_t *)(P))==-1)?(((int64_t)((P)[0])!=-1)?MORN_TYPE_U32:MORN_TYPE_S32):MORN_TYPE_F32):(\
(sizeof((P)[0])==8)?((*((int64_t *)(P))==-1)?MORN_TYPE_S64:MORN_TYPE_D64):-1))),\
memcpy((P),morn_data_buff,sizeof((P)[0])),\
morn_data_type\
)
int main(void)
{
const char* typeName[9] = { "unsigned char","char","unsigned short","short","unsigned int","int","float","long long","double" };
uint8_t a; printf("a typeName is %s\n", typeName[mDataType(&a)]);
int8_t b; printf("b typeName is %s\n", typeName[mDataType(&b)]);
uint16_t c; printf("c typeName is %s\n", typeName[mDataType(&c)]);
int16_t d; printf("d typeName is %s\n", typeName[mDataType(&d)]);
uint32_t e; printf("e typeName is %s\n", typeName[mDataType(&e)]);
int32_t f; printf("f typeName is %s\n", typeName[mDataType(&f)]);
float g; printf("g typeName is %s\n", typeName[mDataType(&g)]);
int64_t h; printf("h typeName is %s\n", typeName[mDataType(&h)]);
double i; printf("i typeName is %s\n", typeName[mDataType(&i)]);
return 0;
}
·书写多行信息
·union用法