c/c++中的位操作
C\C++支持比较低阶的位运算,在是众人皆知的了。每本C\C++的教科书都会说到这部分的内容,不过都很简略,我想会有很多人不知道位运算用在什么地方。这个帖子就简略说说位运算的用处,更进一步的用法要大家自己去体会。而主要说的是操作标志值方面。
/****************************************/
#define BTI_MSK(bit) (1 << (bit))
#define BIT_SET(x,bit) ((x) |= BTI_MSK (bit))
#define BIT_CLR(x,bit) ((x) &= ~BTI_MSK (bit))
#define BIT_TST(x,bit) ((x) & BTI_MSK (bit))
/****************************************/
考虑一个事物、一个系统、或者一个程序可能会出现一种或者几种状态。为了在不同的状态下,作出不同的行为,你可以设立一些标志值,再根据标志值来做判断。比如C++的文件流,你就可以设定一些标志值,ios::app, ios::ate, ios::binary, ios::in, ios::out, ios::trunc,并且可以将它用|组合起来创建一个恰当的文件流。你可能会将这些标志值定义为bool类型,不过这样要是设置的标志值一多,就会很浪费空间。
而假如定义一个整型数值,unsigned int flags; 在现在的系统,flags应该是32位, 用1,2,3....32将位进行编号,我们可以进行这样的判断, 当位1取1时,表示用读方式打开文件,当位2取1时,表示用写方式打开文件,当位3取1时,用二进制方式打开文件....因为flags有32位,就可以设置32个不同的状态值,也相当于32个bool类型。这样一方面省了空间, 另一方面也多了个好处,就是如前面所说的,可以将标志值组合起来。
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
好啦,上面有点不清不楚的。下面看看到底怎么操作这些标志值。
设想C++的类ios这样定义, 其实没有这个类,只有ios_basic类,typedef basic_ios<char> ios;
class ios
{
public:
enum { app = 0x0001, ate = 0x000
相关文档:
#
是生成字符串:
#define a(x) #x
a(bc
) => "bc"
##
是连接:
#define a(x) abc##x
&n ......
前些天,编程序是用到了很久以前写的C程序,想把里面的函数利用起来,连接发现出现了找不到具体函数的错误:
以下是假设旧的C程序库
C的头文件
/*-----------c.h--------------*/
#ifndef _C_H_
#define _C_H_
extern int add(int x, int y);
#endifC的源文件
/*-----------c.c--------------*/
int add(int x, in ......
前面两篇基本把指针给介绍完了,相信大家对指针已经不是那么陌生了。也不会因为指针和数组之间的关系而导致混淆了。大家可能也迫不及待想了解下后来的知识。今天我们就介绍下结构体。
对于结构体,既然叫结构体,形象上我们可以理解其就是一堆数据集合在一起形成一个结构。就比如一个学生的信息包括:学号、姓名、班级、年 ......
C/C++是最主要的编程语言。这里列出了50名优秀网站和网页清单,这些网站提供c/c++源代码。这份清单提供了源代码的链接以及它们的小说明。我已尽力包括最佳的C/C++源代码的网站。这不是一个完整的清单,您有建议可以联系我,我将欢迎您的建议,以进一步加强这方面的清单。 1、http://snippets.dzone.com/tag/c/ --数以千计 ......
主要讲讲windows操作系统在C盘空间不足的情况下,我们可以通过那些具体手段来增加C盘空间。
1.打开“我的电脑”-“工具”-“文件夹选项”-“查看”-在“显示所有文件和文件夹”选项前打勾-“确定”
2.删除以下文件夹中的内容:
x:\ ......