2012年5月13日

算术右移 逻辑右移

摘要: 先由一道题目引入:有两个变量a和b,不用if、?:、switch等判断语句,找出较大的那个变量。其中一种答案如下:char* result[] = {"a is larger", "b is larger"};int c = a - b;c = unsigned(c) >> (sizeof(int) * 8 - 1);cout << result[c] << endl;sizeof(int) * 8 很好理解,就是求出int型占内存的bit数,-1就是为了右移后保留最高位,即保留符号位。问题来了:为什么移位时要把c转为 阅读全文

posted @ 2012-05-13 11:18 JacobChen2012 阅读(4096) 评论(1) 推荐(1) 编辑

2012年5月3日

(转载)堆和栈的区别

摘要: 一、预备知识—程序的内存分配一个由C/C++编译的程序占用的内存分为以下几个部分:1.1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。1.2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。1.3、全局区(静态区)(static)—,全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域, 未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。 - 程序结束后有系统释放 1.4、文字常量区—常量字符串 阅读全文

posted @ 2012-05-03 23:18 JacobChen2012 阅读(244) 评论(0) 推荐(1) 编辑

feof()判断文件结束的问题

摘要: 我在编写学生成绩管理系统时用到了写文件和读文件,发现读文件总会显示出乱码,调试发现是因为用feof()做判断,在读文件最后时fread()多读取了一次。我一开始的解决办法是每次读取完文件,都把最后一个节点(每一行数据都读取放到链表的节点里)free掉。但这种方法明显不是那么好。feof(fp)用来测试fp所指向的文件当前状态是否为“文件结束”。如果文件结束,则返回1,否则返回0。适合于二进制文件和文本文件。但是,在实际使用feof时却发生了问题:文件实际已经结束时feof还要再判断一次才返回1测试代码如下: 1 #include <stdio.h> 2 int main() 3 { 阅读全文

posted @ 2012-05-03 20:32 JacobChen2012 阅读(4337) 评论(1) 推荐(3) 编辑

导航