C 位操作
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
C 位操作
时间:2009-10-9
作者:sofa120
注: 转载请说明出处
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
1、C位操作:利用位操作,可以对字节的每位进行管理以及操作,可以极大的缩小了存储空间,有利于存储空间的利用,在资源严格要求的环境中有极大的帮助。
位操作,一般有:&(位与),|(位或),~(取反),^(位与或),>>(位右移),<<(位左移)。
&(位与),两个位同时为1则结果为1。
|(位或),只要一个位为1则结构为1。
~(取反),顾名思义,变1为0,变0为1。
^(位与或),两位不相同时,结果为1。
>>(位右移)
<<(位左移)
2、位操作的应用:
掩码:利用位与跟掩玛一起作用,起到把除掩玛中位为1的位对称的掩盖。
打开位:利用位或把想置1的位跟1位或,这样起到打开位的作用。通常用来控制硬件的端口。
关闭位:通过跟位与操作,利用0跟1位与就起到关闭位的操作。
转置位:利用位与或的特性,0^B为B,1^1为0,1^1为0,就把想转置的位转置了。
查看一位的值:(必须注意的)首先通过掩玛与或关闭不是查询的位。然后通过比较,就可以知道该位的值。
位移得到相应的位:利用位移把不需要的位去除。
3、位操作的另一种方法是:位字段。它是一个unsigned int或signed int中一组相邻的位。位字段由一个结构体申明,提供每一个字段的名字,即标签,决定每个字段的宽度。
如:
struct
{
unsigned int autfd:1;
unsigned int bldfc:1;
unsigned int undln:1;
unsigned int itals:1;
&nb
相关文档:
一般在调试打印Debug信息的时候, 需要可变参数的宏. 从C99开始可以使编译器标准支持可变参数宏(variadic macros), 另外GCC也支持可变参数宏, 但是两种在细节上可能存在区别.
1. __VA_ARGS__
__VA_ARGS__ 将 "..." 传递给宏 . 如
......
最近一直研究一个对个人而言很有价值的一个LIB库的逆向。在今天下班后突然灵感闪现,这个断断续续逆了接近一周的核心管理类。终于在今天给逆完了。在最后一个函数里,碰到了之前基本没有用过的一条指令。(呵呵,高手见笑了!)当然光看单句的汇编指令,是没有办法看出具体的作用的,而且还很可能 ......
定义按值传递和按引用传递这两个术语是重要的。
按值传递意味着当将一个参数传递给一个函数时,函数接收的是参数的一个副本。因此,如 果函数修改了该参数,仅改变副本,而原始值保持不变。按引用传递意味着当将一个参数传递给一个函数时,函数接收的是参数的内存地址,而不是参数的副本。因 此,如果函数修改了该参数,调 ......
检查空格字符
#include <ctype.h>
int isspace ( int c );
http://www.cplusplus.com/reference/clibrary/cctype/isspace/
Checks if parameter c is a white-space character.For the purpose of this function, standard white-space characters are:
' '
(0x20)
space (SPC)
'\t'
(0x09)
horizontal tab ......
要写好C语言程序,最重要的当然是把要解决的问题分析清楚,设计好解决问题的方案和通过计算实现求解的过程,对问题的求解过程进行科学的结构化的分解。在此基础上进一步考虑如何写程序的时候,下面的建议可能有所帮助。
这些建议中有些是一般性的,不仅仅对C语言程序设计有效;也有些是特别针对C语言程序设计的。这个表还 ......