2017年1月15日 11:20:59杂项

位操作

位操作的必要性:通过串口或并口与其他器件相连

&按位与

|按位或

^按位异或:两位相异时为1,相同时为0.

上述三个操作满足结合律和交换率。

左移运算符:<<将要运算的二进制位左移

规则:高位丢弃,低位补0.

使用格式:

int a = 1<<1;

a = 2;

右移运算符:>>讲要运算的二进制右移

规则:高位补符号位,地位丢弃。

符号位:若为正数则符号位是0,负数符号位为1。

小技巧:

左移n位相当于乘以2的n次方,但效率比数学运算高。

右移n位相当于除以2的n次方,但效率比数学运算高。

防错准则:

避免位操作运算符,逻辑运算符和数学运算符同出现在一个表达式中

当位运算符,逻辑运算符和数学运算符需要同时参与运算时,尽量使用括号()来表达计算次序。

嵌入式比较讲究效率!

加减法的优先级高于左移和右移。

交换两个变量:利用#define和\代码块替换

#define SWAP1(a,b) \

{   \

int temp = a; \

a = b; \

b = temp; \

} \

#define SWAP2(a,b) \

{   \

a = a + b; \

b = a - b ; \

a = a - b ; \

} \

问题:如果a很大,b很大,a+b的值可能会使a溢出。

#define SWAP3(a,b) \

{   \

a = a ^ b; \

b = a ^ b ; \

a = a ^ b ; \

} \

位运算符的效率比加减高得多,整数交换建议用第三种方法。

某个面试题:

有一个数列,其中的自然数都是以偶数的形式存在,只有一个自然数出现的次数为奇数次,找出这个数。

贪心法——++,--表达式阅读技巧

1.编译器处理的每个符号应该尽可能多的包含字符

2.编译器从左像右一个一个尽可能多的读入字符

3.当即将读入的字符不可能和已读入的字符组成合法符号为止。

程序编译的四个步骤:

由.c和.h文件经过预处理cpp产生.i文件,再经过编译器gcc,产生.s文件,经过汇编器as产生.o文件,.o和.a文件经过链接器产生.out文件。

预编译阶段:

处理掉所有注释,用空格代替。

将#define删除,展开所有的宏

处理条件编译指令#if,#ifdef,#elif,#else,#endif.

处理#include,展开被包含的文件

保留编译器需要使用的#pragma指令

预处理指令:gcc-E file.c-o hello.i

编译阶段:

对预处理文件进行一系列的词法分析,语法分析和语义分析

词法分析:关键字,标示符,立即数等

语法分析:表达式是否遵循语法会泽

语义分析:在语法分析的基础上进一步分析

生成.i文件

分析结束后,进行代码优化生成相应的汇编代码文件

编译指令: gcc-S file.c -o hello.s

生成.s文件。

链接器:将.o文件和库文件装载在一起,生成最终可执行文件。

与源代码密切相关的,预处理,编译,汇编。

链接器

作用:把各个模块之间相互引用的部分处理好,使个个模块正确衔接。

#define定义宏常量可以出现在代码的任何地方

#define从本行开始,之后的代码都可以使用这个宏常量。

#define 别名 原内容

#define 路径用法:

#define  PATH_1  D:\XYZ\test.c

#define表达式有函数调用的假象,却不是

#define表达式可以比函数更强大

#define表达式比函数更容易出错

printf(“%d\n”,((i++<j)  ? (i++)  :  (j)));

宏表达式在预编译期被处理,编译器不知道宏表达式的存在

宏表达式用“实参”完全替代形参,不进行任何计算。

宏表达式没有任何“调用”开销

宏表达式不能出现递归定义

宏定义的范围

#define   X    256

//以下可使用,直到#undef X

#undef   X

强大的内置宏

宏 含义 示例

_FILE_   被编译的文件名 file1.c

_LINE_ 当前行数 25

_DATE_ 编译时日期 Jan312012

_TIME_ 编译时时间 17:01:01

_STDC_ 是否遵循标准C规范 1

定义日志宏

如果用函数来写日志:

void log(char* s)

{

printf(“%s %d %s\n”,_FILE_,_LINE_,s); //行

}

如果在文件中不停调用这个函数,会发现显示的第二个数据一直为函数定义时的行数。

因为要调用这个函数时,需要跳回函数执行,这样只会输出定义函数时的行数。

这时需要用到宏定义

#define LOG(s) \printf(“%s %d %s\n”,_FILE_,_LINE_,s);

这几个信息不够,还需要加上时间

先包含时间头文件,#include “time.h”

void f()

{

time_t t;

struct tm* ti;

time(&t);

ti = localtiome(&t);

printf(“%s %d %s”,asctime(ti),_LINE_,_FILE_,s);

}

如何将这个函数加到宏定义

#define LOG(s)  do{ \

time_t t; \

struct tm* ti; \

time(&t); \

ti = localtime(&t); \

printf(“%s [%s %d],%s”,asctime(ti),_FILE_,_LINE_,s); \

}while(0);

牛叉的续行符!

课后思考:

#define  f   (x)      ((x)-1)

宏代表什么意思?对空格敏感么?宏“调用”对空格敏感么

时间: 2024-10-10 17:38:02

2017年1月15日 11:20:59杂项的相关文章

2017年 1月 15日 指针 学习整理

有关指针的概念: 指针是一个特殊的变量,它里面存储的数值被解释为内存里的一个地址. FIrst of all:我们需要明确目标 关于指针的学习以及使用我们需要搞清楚有关指针的四个内容:指针的类型,指针所指向的类型,指针的值(或者说叫指针所指向的内存区),还有指针本身所占用的内存区(指针也是一个特殊的变量吗,它肯定也是占据内存的).接下来让我们分别进行学习. 我们先来申明几个指针的例子: 1 int *ptr; 2 char *ptr; 3 int **ptr; 4 int (*ptr)[3];

【烟雨谜曼群】2017年4月15日山涧流水主擂谜会题

[烟雨谜曼群]2017年4月15日山涧流水主擂谜会题 1.男生女生,共同加油(中国河流)黄河2.炎黄子孙了不起(金融机构简称 4字)中国人行3.祖国永远是花季(陕晋吉地名各一 4字)华.夏.长春4.老板出资办谜会(四字称谓)主赞助商5.广西赞歌(屈原篇目)桂颂6.莫忘欢乐时(二字称谓)娱记7.全部说岳(安徽名胜)齐云山8.家有藏书十万卷(央视主持人)居文沛9.水中鱼两尾,枝头鸟一对(国产手机)小米10.成功属于建设人(相声演员)郑健11.营囗出品中国结(10笔字)莹12.水手相邀上抚河(唐代诗僧

【天一家园群】2017年4月15日《浦东谜刊》百家谜会展猜8谜题

[天一家园群]2017年4月15日<浦东谜刊>百家谜会展猜8谜题 1.虎年改变旧面貌(三字词)树新风/石彧2.黄河之水天上来(成语)源远流长/石彧3.三代挖煤做马牛(银行用语)长期无息/石彧4.日日待漏朝君王(教育用语)天天向上/石彧5.阿谀奉承拍马屁(菜谱)溜三样/石彧6.海浪你轻轻地摇(世界女排名将)卡波特/石彧7.人面桃花相映红(美术名词)对比色/石彧8.老君下凡不炼丹(中成药)回天再造丸/石彧9.月光如水水如天(中国地名)三明/石彧10.停车坐爱枫林晚(花名)对红/石彧11.乱落梨花飞

【银河灯谜群】2017年4月15日天外来客主擂谜会题

[银河灯谜群]2017年4月15日天外来客主擂谜会题 1.雷起自须封一路(节气)白露2.今日人多莫奢侈(节气)大暑3.前年梅开满一江(市名)珠海4.宋朝纳赂更心寒(电器品牌)赛格5.上台得了一百分(广州地名)白云6.但见廉洁者,终究是赢家(泊人二2+2)张清.白胜7.一一脱困聚水泊(酒名)湘泉8.中原客先到,一一作安排(节气)夏至9.送别孙子,老头日日牵挂(节气)小暑10.金殿乏计平暴乱(国名二2+3)朝鲜.安道尔11.辗转半生,首次进京(甘肃地名)平凉12.何苦用此着?自古不曾见(国名)荷兰1

【松陵文虎群】2017年4月15日尤丽雅(天阶石)主擂谜会题

[松陵文虎群]2017年4月15日尤丽雅(天阶石)主擂谜会题 试铃题:1.群龙无首(四字称谓)少当家的2.奉承皇后(鲁迅小说人物)阿Q正式题:1.卫母(网站名)驴妈妈2.删除键(三字电子元件,卷帘)LED3.膝盖置换手术(三字外假期)复活节4.黄歇佚史(四字书名)春申旧闻5.演技浮夸(四字物理名词)表面张力6.马腾三儿名是啥?(泊号,卷帘)铁叫子7.番芥蓝炒得太腻了(植物,卷帘)油菜花8.大王叫我来巡山(称谓二)主教.看守9.不收交易费(2字江苏地名)无锡10.日本海盗先后来(字)温11.驯马绝

【南通群艺谜社群】2017年4月15日莫志刚主擂谜会谜题

[南通群艺谜社群]2017年4月15日莫志刚主擂谜会谜题 1.岩冬高挺迎客松(字一)峰2.“落红不是无情物”(酒名冠产地)绍兴花雕清·龚自珍<己亥杂诗>.3.风雨交加老树间(字一)澎4.“岂肯低头跪妇人”(生理现象一)男性勃起京剧<桑园会>唱词.5.自始迷台好用心(字一)哞6.“同时采择百余人”(赛场称谓一)拉拉队长唐·白居易<上阳白发人>.7.打开镜框白思儿(字一)兜8.“论功还欲请长缨”(部队称谓一)军事将领唐·祖咏<望蓟门>:“将”由jiàng异读成j

(X6支持https)2017年9月15日友价T5X6商城站长交易源码仿互站送手机版程序8套模版

(https专版)2017年9月15日友价T5X6商城站长交易源码仿互站送手机版程序8套模版 修复官方版本的各种问题,, 安装步骤,1.将源码上传到主机,2.专入数据库文件.依次导入codes_170915.sql codes_data.sql codes_data_city.sql后台用户名密码: admin admin123 友价源码 X620170915补丁(主要修复https SSL及兼容问题) 以下是本次补丁的升级内容: 1.修复https微信登录功能2.手机版SSL错误,兼容http

2017年 1月15日 欧拉回路 学习整理

欧拉回路 欧拉通路: 通过图中每条边且只通过一次,并且经过每一顶点的通路(顶点并不要求都应经过一遍) 欧拉回路: 通过图中每条边且只通过一次,并且经过每一顶点的回路 有向图的基图:忽略有向图所有边的方向,得到的无向图称为该有向图的基图. 无向图 设G是连通无向图,则称经过G的每条边一次并且仅一次的路径为欧拉通路: 如果欧拉通路是回路(起点和终点是同一个顶点),则称此回路是欧拉回路 具有欧拉回路的无向图G成为欧拉图 有向图 (1)设D是有向图,D的基图连通,则称经过D的每条边一次并且仅有一次的有向

数学分析高等代数考研试题荟萃[更新至2017年12月15日]

需要请点击链接. 10001北京大学2016-2017-1高等代数I期末考试试题 10001北京大学87,96-14,17年数学分析考研试题 (05含解答) 10001北京大学96-02,05,07,08,10-14 年高等代数考研试题 10002中国人民大学99,00,03,04,07 年数学分析考研试题 10002中国人民大学99,00,03,04年高等代数考研试题 10003清华大学99-01,03,06年数学分析考研试题 10003清华大学01,03,06,11年高等代数考研试题 100