摘要: 假设读者熟悉普通代数与布尔代数,下面是部分常见的涉及到加法、减法与逻辑运算符的组合:a. -x=~x+1b. =~(x-1)c.~x=-x-1d. -~x=x+1e. ~-x=x-1f. x+y=x-~y-1g.=(x^y)+2(x&y)h. =(x|y)+(x&y)i. =2(x|y)-(x^y)j. x-y=x+~y+1k. =(x^y)-2(~x&y)l. =(x&~y)-(~x&y)m. =2(x&~y)-(x^y)n. x^y=(x|y)-(x&y)o. x&~y=(x|y)-yp.=x-(x&y)q. ~(x- 阅读全文
posted @ 2013-07-12 23:57 cpoint 阅读(655) 评论(0) 推荐(0) 编辑
摘要: 信息是以比特流的方式传输的,类似01000001。在传输过程中,有可能会发生错误,比如,我们存储了01000001,但是取出来却是01000000,即低位由0变成了1。为了检测到这种错误,我们可以通过“奇偶校验”来实现。假如,我们存储的数据是一个字节,8个比特位,那我们就可以计算每个字节比特位是1的个数,如果是偶数个1,那么,我们就把第九个位设为1,如果是奇数个1,那么就把第九个位设为0,这样连续9个字节比特位为1的位数肯定是奇数。这中方法叫做“奇校验”,“偶校验”和此类似。当然,在实际应用中,也可以把一个字节的前7位作为数据位,最后一个为作为校验位。1、奇偶校验的常规方法:unsigned. 阅读全文
posted @ 2013-07-12 23:33 cpoint 阅读(26106) 评论(0) 推荐(0) 编辑
摘要: 1、使用加法与减法交换两数值: #define SWAP(a, b) ((&(a) == &(b)) || \ (((a) -= (b)), ((b) += (a)), ((a) = (b) - (a))))这种交换数值a与b的方法没有使用临时变量,初始化检测a,b,如果在同一内存区,则被忽略,当然这通常不会发生,(编译器会忽略,然而无论如何都是一种优化),假如可以确定溢出异常,于是传递无符号数异常就不会抛出。下面的逻辑“或”运算的方法在某些机器上可能要快一些,不要使用浮点型数字。2、使用逻辑“或”方法交换两数值: #define SWAP(a, b) (((a)... 阅读全文
posted @ 2013-07-12 23:17 cpoint 阅读(3170) 评论(0) 推荐(0) 编辑
摘要: unsigned int v; // 判断v是否为2的幂 bool f; // f为判断的结果 f = (v & (v - 1)) == 0; // 结果为0表示不是2 的幂 // 改变表示方法,可以使用下面的方法: f = v && !(v & (v - 1)); 阅读全文
posted @ 2013-07-12 21:00 cpoint 阅读(619) 评论(0) 推荐(0) 编辑
摘要: 不用选择分支找出指定两整数中的最大值与最小值:int x; int y; // 找出x与y的最大值与最小值 int r; // r保存结果 r = y ^ ((x ^ y) & -(x =y, 那么 -(x> (sizeof(int) * CHAR_BIT - 1))); // min(x, y) r = x - ((x - y) & ((x - y) >> (sizeof(int) * CHAR_BIT - 1))); // max(x, y)注意到1989 ANSI C说明书没有指定有符号右移,所以上上述方法不稳定,如果抛出溢出异常,于是在做减法操作的时候 阅读全文
posted @ 2013-07-12 20:56 cpoint 阅读(1551) 评论(0) 推荐(0) 编辑
摘要: 判断两整数是否异号:int x, y; //输入比较的两数 bool f = ((x ^ y) > sizeof(int) * CHAR_BIT - 1; r = (v + mask) ^ mask; 变式: r = (v ^ mask) - mask; 阅读全文
posted @ 2013-07-12 20:31 cpoint 阅读(933) 评论(0) 推荐(0) 编辑
摘要: 关于衡量计算操作的方法: 当为算法统计操作的数量的时候,所有的C运算符被认为是一样的操作。中间过程不被写入随机存储器(RAM)而不被计算,当然,这种操作数的计算方法,只是作为那些接近机器指令和CPU运行时间的服务。所有的操作被假设成花相同的运行时间,事实上是不正确的。有很多不同的因素决定一个系统能多快运行一段样例代码,例如:缓存大小,内存带宽,指令集合等等……。最后,建立一套标准才是衡量一种方法快过另一种方法的最好方法。判断一个整数的符号:int v; // v为我们要判断的整数 int sign; // 保存结果 sign = -(v > (sizeof(int) * CH... 阅读全文
posted @ 2013-07-12 20:26 cpoint 阅读(3807) 评论(0) 推荐(0) 编辑
摘要: 1、使用下面的代码将最右边的1改变为0,假如没有1则结果为0(e.g.,01011000=>01010000): x & (x-1)此代码可以用来判断一个无符号的整数是否为2的幂,假如x & (x-1)==1,则x为2的幂,否则x不为2的幂2、相似地,下面的代码可以用来判断一个无符号的整数是否具备2n-1的格式(包括n=0、1) x & (x+1)3、下面的代码将隔离最右边的1,假如右边没有1则结果返回0 (e.g., 01011000 =>00001000): x & (-x)4、下面的代码将隔离最右边的0,假如右边没有0则结果返回0 (e.g., 阅读全文
posted @ 2013-07-12 00:35 cpoint 阅读(378) 评论(0) 推荐(0) 编辑
摘要: 位操作允许程序员对单独的位进行操作,例如,早某些机器上,短整型占16位,位操作将每一位单独操作。位操作允许程序员设置、清除、测试与其他的操作,这些操作如下表:操作含义&按位与|按位或^按位异或~取反>右移这些操作用于整型或者字符型1、按位与(&)Bit1Bit2Bit1 & Bit2000010100111通常我们可把按位“与”操作 & 作为关闭某位(即将该位置0)的手段,例如我们想要关闭a数中的第3位,而又不影响其它位的现状,可以用一个数0xF7,即二进制数1111 0111去与a数作按位“与”运算: 0x88 1000 1000 a数& 0xF 阅读全文
posted @ 2013-07-12 00:29 cpoint 阅读(397) 评论(0) 推荐(0) 编辑
摘要: 详细分析 MINIX消息机制的核心:mpx386.sstart.cproc.c保护模式分析:src/kernel/exception.csrc/kernel/protect.c src/kernel/klib386.ssrc/kernel/klib.ssrc/kernel/main.csrc/kernel/misc.csrc/kernel/i8259.c含了一些debug下的dump机制:src/kernel/dmp.c驱动相关代码分析:src/kernel/driver.hsrc/kernel/driver.csrc/kernel/drvlib.hsrc/kernel/drvlib.cWin 阅读全文
posted @ 2013-07-12 00:18 cpoint 阅读(661) 评论(0) 推荐(0) 编辑
摘要: 以下头文件均在目录include/下:ansi.h: 用来检测编译器是否遵循标准C,如果是的话,_ANSI就被定义为31415,如果不是的,则_ANSI未定义。通过这个宏来诊测。limits.h: 定义语言类型(如整型)和操作系统(如字)的基本尺寸,提高了可移植性errno.h: 定义了minix操作系统程序执行时可能出现的各种错误号unistd.h: 包含了大量的重要常数和系统调用函数原型。string.h: 包含了用于字符处理的函数原型signal.h: 定义了所有的ANSI和POSIX通用信号,minix支持所有的POSIX信号fcntl.h: 定义了open()和fcntl()系统调用 阅读全文
posted @ 2013-07-12 00:15 cpoint 阅读(588) 评论(0) 推荐(0) 编辑
摘要: Minix2.0操作系统的源代码由两个目录组成:include/目录和src/目录include/目录包含了操作系统所有的头文件(即.h文件)src/目录下包含了操作系统所有的源文件(.c或.s文件)头文件的组织结构为:include/目录下为POSIX标准头文件;include/sys/目录下为额外的POSIX标准头文件;include/minix/目录下为MINIX操作系统定义的头文件源文件的组织形式为:src/kernel/目录存放着MINIX操作系统第一层(进程管理)和第二层(设备管理)的源代码;src/mm/目录存放着MINIX操作系统第三层中内存管理子系统的源代码;src/fs目录 阅读全文
posted @ 2013-07-12 00:11 cpoint 阅读(2441) 评论(0) 推荐(0) 编辑
浏览次数:travelocity promotion codes