
转载
fzzjoy
Code Change World
展开
-
C语言的按位 或,与,非,异或 运算符
注意与常用逻辑运算符的区别位运算符常用逻辑运算符按位与:& 与:&& 按位或:| 或:||按位异或:^ 非:!非运算:~按位与&:其功能是参与运算的两数各对应的二进位相与。只有对应的两个二进位均为1时,结果位才为1 ,否则为0。参与运算的数以补码方式出现。 例如:9&5可写算式如下: 00001001 (9的二进制补码)&00000101 (5的二转载 2015-04-17 15:01:54 · 15925 阅读 · 0 评论 -
TCP套接字编程模型
TCP套接字编程经常使用在客户/服务器编程模型(简称C/S模型)中,C/S模型根据复杂度分为简单的客户/服务器模型和复杂的客户/服务器模型。C/S简单客户/服务器模型是一对一关系,一个服务器端某一时间段内只对应处理一个客户端的请求,迭代服务器模型属于此模型。C/S复杂服务器模型是一对多关系,一个服务器端某一时间段内对应处理多个客户端的请求,并发服务器模型属于此模型。迭代服务器模型和并发服务器模型是转载 2015-06-03 19:25:06 · 640 阅读 · 0 评论 -
2015阿里系统工程师面试经验分享
这篇文章的源处是:http://user.qzone.qq.com/794884160/blog/1411125641。这个是在签意向书认识的同事,他把面试经验写在QQ空间,经过他的同意后,我把这篇文章转载到这里,供大家分享。以下是正文:前言:首先我想说的是,阿里面试不是碰运气,除了技术,你还要能变通,而只有了扎实的技术作根基你才能轻松变通!!!! 能进入BAT(百转载 2015-04-09 23:22:02 · 2348 阅读 · 0 评论 -
C语言中的无符号扩展和带符号扩展
C语言中,当不同类型的数据进行运算的时候,就会发生强制或隐式类型转换,通常是低精度的数据类型扩展到高精度的。有些时候,低精度的位数比较少,扩展到高精度的时候,就要在前面补充一些位。那么这些位是补0还是补1呢?这就涉及到无符号扩展和带符号扩展。 扩展的原则是:1.有符号的数据类型,在向高精度扩展时,总是带符号扩展2.无符号的数据类型,在向高精度扩展时,总是无符号扩展 怎么转载 2015-03-21 15:57:28 · 2468 阅读 · 0 评论 -
【面试题】实现memcpy函数
转载自:http://my.oschina.net/renhc/blog/36345面试中如问到memcpy的实现,那就要小心了,这里有陷阱。先看下标准memcpy()的解释:?12void*memcpy(void*dst, constvoid *src, size_tn转载 2015-05-08 19:51:42 · 1270 阅读 · 0 评论 -
内存管理算法
在内存管理中存在这两类算法:一类是内存分配算法,一类是页面置换算法 内存分配算法:是指怎么从连续的逻辑地址空间上分配内存地址给进程。常见内存分配算法及优缺点如下: (1)首次适应算法。使用该算法进行内存分配时,从空闲分区链首开始查找,直至找到一个能满足其大小要求的空闲分区为止。然后再按照作业的大小,从该分区中划出一块内存分配给请求者,余下的空闲分区仍留在空闲分区链中。转载 2015-10-18 10:20:15 · 1097 阅读 · 0 评论 -
算法时间复杂度的计算
基本的计算步骤 时间复杂度的定义 一般情况下,算法中基本操作重复执行的次数是问题规模n的某个函数,用T(n)表示,若有某个辅助函数f(n),使得当n趋近于无穷大时,T(n)/f(n)的极限值为不等于零的常数,则称f(n)是T(n)的同数量级函数。记作T(n)=O(f(n)),称O(f(n))为算法的渐进时间复杂度(O是数量级的符号 ),简称时间复杂度。根据定义,可以归纳转载 2015-03-29 19:45:55 · 448 阅读 · 0 评论 -
大端小端格式详解
1. 什么是大端,什么是小端:所谓的大端模式,是指数据的低位保存在内存的高地址中,而数据的高位,保存在内存的低地址中;所谓的小端模式,是指数据的低位保存在内存的低地址中,而数据的高位保存在内存的高地址中。2.为什么会有大小端:为什么会有大小端模式之分呢?这是因为在计算机系统中,我们是以字节为单位的,每个地址单元都对应着一个字节,一个字节为8bit。但是在C语言中除了转载 2015-04-01 16:16:41 · 444 阅读 · 0 评论 -
线程的分离状态
在任何一个时间点上,线程是可结合的(joinable),或者是分离的(detached)。一个可结合的线程能够被其他线程收回其资源和杀死;在被其他线程回收之前,它的存储器资源(如栈)是不释放的。相反,一个分离的线程是不能被其他线程回收或杀死的,它的存储器资源在它终止时由系统自动释放。 线程的分离状态决定一个线程以什么样的方式来终止自己。在默认情况下线程是非分离状态的,这种情况转载 2015-03-05 17:56:27 · 449 阅读 · 0 评论 -
Linux-dd命令详解
dd 是 Linux/UNIX 下的一个非常有用的命令,作用是用指定大小的块拷贝一个文件,并在拷贝的同时进行指定的转换。名称: dd 使用权限: 所有使用者dd 这个指令在 manual 里的定义是 convert and copy a file 使用方式: dd [option] 如果你想要在线看 manual, 可以试试: dd --help 或转载 2015-03-12 16:20:41 · 422 阅读 · 0 评论 -
理解 Linux 的硬链接与软链接
硬链接与软链接是 Linux 文件系统中的一个重要概念,其涉及文件系统中的索引节点 (index node 又称 inode),而索引节点对象是 Linux 虚拟文件系统 (VFS) 的四个基本概念之一。通过剖析硬链接与软链接的联系与区别,我们可更好的了解 Linux 中 VFS 这一通用文件模型。并让 Linux 普通用户和系统管理员正确使用硬链接与软链接,帮助文件系统开发者获取 inode转载 2015-05-07 20:13:09 · 437 阅读 · 0 评论 -
Linux写时拷贝技术(copy-on-write)
原文地址:http://www.cnblogs.com/biyeymyhjob/archive/2012/07/20/2601655.htmlCOW技术初窥: 在Linux程序中,fork()会产生一个和父进程完全相同的子进程,但子进程在此后多会exec系统调用,出于效率考虑,linux中引入了“写时复制“技术,也就是只有进程空间的各段的内容要发生变化时,才会将父进程的内转载 2015-04-17 16:03:25 · 597 阅读 · 0 评论 -
Linux——守护进程的创建
守护进程是生存期较长的一种进程。他们常常在系统自举时启动,尽在系统关闭时才终止。因为他们没有控制终端,所以说他们是在后台运行的。其编程规则如下:1. 在后台运行。为避免挂起控制终端将Daemon放入后台执行。方法是在进程中调用fork使父进程终止,让Daemon在子进程中后台执行。if(pid=fork())exit(0); //是父进程,结束父进程,子进程转载 2015-03-14 14:34:18 · 421 阅读 · 0 评论 -
C语言的自动类型转换
自动转换遵循以下规则:1) 若参与运算量的类型不同,则先转换成同一类型,然后进行运算。2) 转换按数据长度增加的方向进行,以保证精度不降低。如int型和long型运算时,先把int量转成long型后再进行运算。 a.若两种类型的字节数不同,转换成字节数高的类型b.若两种类型的字节数相同,且一种有符号,一种无符号,则转换成无符号类型3)转载 2015-05-28 20:12:17 · 450 阅读 · 0 评论 -
可重入函数与不可重入函数
转自:http://www.cnblogs.com/luvi/archive/2008/05/09/1190493.html主要用于多任务环境中,一个可重入的函数简单来说就是可以被中断的函数,也就是说,可以在这个函数执行的任何时刻中断它,转入OS调度下去执行另外一段代码,而返回控制时不会出现什么错误;而不可重入的函数由于使用了一些系统资源,比如全局变量区,中断向量表等,所以它如果被中断的话转载 2015-05-08 19:29:47 · 484 阅读 · 0 评论 -
Linux man 命令后面的数字含义及作用
Linux的man很强大,该手册分成很多section,使用man时可以指定不同的section来浏览,各个section意义如下: 1 - commands2 - system calls3 - library calls4 - special files5 - file formats and convertions6 - games for linux7 - ma转载 2017-08-22 23:41:52 · 1638 阅读 · 0 评论 -
关于typedef的用法总结
参考文章:关于typedef的用法总结转载 2017-09-29 15:48:40 · 254 阅读 · 0 评论 -
散列
参考链接:详细图解什么叫平方探查法即二次探测再散列和线性探测再散列(数据结构 哈希函数 哈希冲突)哈希表(散列表)原理详解数据结构:散列(hashing)散列的基本概念散列方法的主要思想是根据结点的关键码值来确定其存储地址:以关键码值K为自变量,通过一定的函数关系h(K)(称为散列函数),计算出对应的函数值来,把这个值解释为结点的存储地址,将结点存入到此存储单元中。检索时,用同样的方法计算地址,然...转载 2015-04-09 18:32:29 · 1371 阅读 · 0 评论 -
堆排序
转载出处: http://www.cnblogs.com/dolphin0520/archive/2011/10/06/2199741.html堆排序是利用堆的性质进行的一种选择排序。下面先讨论一下堆。1.堆 堆实际上是一棵完全二叉树,其任何一非叶节点满足性质: Key[i]=Key[2i+1]&&key>=key[2i+2] 即任何一非叶节点的关键字转载 2015-04-27 15:59:34 · 483 阅读 · 0 评论 -
归并排序的实现
转载自:http://blog.youkuaiyun.com/morewindows/article/details/6678165归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。首先考虑下如何将将二个有序数列合并。这个非常简单,只要从比较二个数列的第一个数,谁小就先取谁,取了后就在对应数列中删除这个数。然后再进行转载 2015-05-06 15:33:45 · 759 阅读 · 0 评论 -
嵌入式软件工程师经典笔试题
> 预处理器(Preprocessor) 1. 用预处理指令#define 声明一个常数,用以表明1年中有多少秒(忽略闰年问题) #define SECONDS_PER_YEAR (60 * 60 * 24 * 365)UL 我在这想看到几件事情: 1). #define 语法的基本知识(例如:不能以分号结束,括号的使用,等等) 2). 懂得预处理器将为你计算常数表达式的值,因转载 2015-05-31 14:43:52 · 927 阅读 · 0 评论 -
ubuntu如何分区
1./swap交换分区,一般为你机器内存的两倍,少于这个容量,系统无法进入休眠。实质是硬盘上的交换空间而非分区,所以没有格式,默认休眠将数据储存于此可以取消(如不用swap必须再设定方可休眠)——多数有1GB内存的桌面用户只要1.5GB swap即可。2GB以上内存的很多用户实际并不需要它——注意,大量处理音频、视频、图片需要3GB以上的交换空间。2./ 根分区,一般选择15G即可,默转载 2014-10-27 23:16:26 · 1463 阅读 · 0 评论 -
字符串匹配的KMP算法
最近学习KMP算法时,在网上看到一篇很好的博文,解析的很清楚,在此分享一下。 字符串匹配是计算机的基本任务之一。 举例来说,有一个字符串"BBC ABCDAB ABCDABCDABDE",我想知道,里面是否包含另一个字符串"ABCDABD"? 许多算法可以完成这个任务,Knuth-Morris-Pratt算法(简称KMP)是最常用的之一。它以三个发明转载 2015-03-13 17:28:09 · 439 阅读 · 0 评论 -
返回局部变量的问题
函数返回局部变量,是返回局部变量的值。但指针(或地址)是一种特殊的值,所以返回局部指针变量需要特别注意。正确情况下,作为函数返回值的局部指针,其所指向对象的作用域应该是调用者作用域、全局或静态常量区;指向栈空间对象的指针作为返回值,存在潜在的错误。1. 返回局部值变量[cpp] view plaincopyint num(void) {转载 2015-03-14 10:42:57 · 518 阅读 · 0 评论 -
函数参数的传递问题(一级指针和二级指针)
原以为自己对指针掌握了,却还是对这个问题不太明白。请教! 程序1: void myMalloc(char *s) //我想在函数中分配内存,再返回 { s=(char *) malloc(100); } void main() { char *p=NULL; myMalloc(p); //转载 2015-03-22 20:29:40 · 894 阅读 · 0 评论 -
C结构体中数据的内存对齐问题
1.先看下面的例子:struct A{ char c1; int i; short s; int j;}a;struct B{ int i; int j; short s; char c1;}b;结构A没有遵守字节对齐原则(为了区分,我将它叫做对齐声明原则),结构B遵守了。我们来看看在x86上会出现转载 2015-03-25 16:26:16 · 562 阅读 · 0 评论 -
c语言中逗号运算符和逗号表达式
C语言提供一种特殊的运算符——逗号运算符。用它将两个表达式连接起来。如: 3+5,6+8称为逗号表达式,又称为“顺序求值运算符”。逗号表达式的一般形式为 表达式1,表达式2逗号表达式的求解过程是:先求解表达式1,再求解表达式2。整个逗号表达式的值是表达式2的值。例如,上面的逗号表达式“3+5,6+8”的值为14。又如,逗号表达式 a=3*5,转载 2015-03-25 15:43:54 · 746 阅读 · 0 评论 -
Sizeof与Strlen的区别与联系
一、sizeof sizeof(...)是运算符,在头文件中typedef为unsigned int,其值在编译时即计算好了,参数可以是数组、指针、类型、对象、函数等。 它的功能是:获得保证能容纳实现所建立的最大对象的字节大小。 由于在编译时计算,因此sizeof不能用来返回动态分配的内存空间的大小。实际上,用sizeof来返回类型以及静态分配的对象、结构或数组所转载 2015-03-25 18:33:50 · 373 阅读 · 0 评论 -
C_malloc、calloc、realloc的区别
参考文章:http://blog.youkuaiyun.com/shuaishuai80/article/details/6140979(1)C语言跟内存分配方式从静态存储区域分配. 内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在.例如全局变量、static变量.在栈上创建 在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结转载 2015-10-17 21:27:18 · 393 阅读 · 0 评论 -
GDB工具使用教程_函数调用栈(call stack)探密
我们知道,通常一个程序的运行,不外乎是A函数调用B,B函数调用C等等,等所有的调用都完成后,整个程序的运行也就ok了。在这个过程中,每当有新的函数调用,系统都会把该函数的一些信息,包括函数的参数,以及一些寄存器的值等,保存到调用栈(call stack)上。等该函数运行完成后,这些信息再从调用栈上弹出(pop)。如下图所示,是一个完整的调用栈:在上图中,整体叫做调用栈(call stack转载 2015-10-17 19:51:06 · 2365 阅读 · 0 评论 -
RISC与CISC(精简指令集与复杂指令集)比较
RISC(精简指令集计算机)和CISC(复杂指令集计算机)是当前CPU的两种架构。它们的区别在于不同的CPU设计理念和方法。早期的CPU全部是CISC架构,它的设计目的是要用最少的机器语言指令来完成所需的计算任务。比如对于乘法运算,在CISC架构的CPU上,您可能需要这样一条指令:MUL ADDRA, ADDRB就可以将ADDRA和ADDRB中的数相乘并将结果储存在ADDRA中。将ADDR转载 2015-05-28 21:16:28 · 9785 阅读 · 0 评论 -
CRC校验
转载自:http://blog.163.com/du_minchao@126/blog/static/107495394201075114028606/一、基本原理 CRC检验原理实际上就是在一个p位二进制数据序列之后附加一个r位二进制检验码(序列),从而构成一个总长为n=p+r位的二进制序列;附加在数据序列之后的这个检验码与数据序列的内容之间存在着某种特定的关系转载 2015-05-09 13:24:53 · 636 阅读 · 0 评论 -
内存字节对齐原则
请牢记以下3条原则:(在没有#pragma pack宏的情况下,务必看完最后一行) 1:数据成员对齐规则:结构(struct)(或联合(union))的数据成员,第一个数据成员放在offset为0的地方,以后每个数据成员存储的起始位置要从该成员大小或者成员的子成员大小(只要该成员有子成员,比如说是数组,结构体等)的整数倍开始(比如int在32位机为4字节,则要从4的整数倍地址开始存转载 2015-04-08 19:03:41 · 447 阅读 · 0 评论 -
struct和typedef struct的区别
在C中定义一个结构体类型要用typedef: typedef struct Student { int a; }Stu; 于是在声明变量的时候就可以:Stu stu1;(如果没有typedef就必须用struct Student stu1;来声明) 这里的Stu实际上就是struct Student的别名。Stu==struct转载 2015-03-04 19:44:28 · 413 阅读 · 0 评论 -
void (*p)() 、 void *p()和void *(*p)(void)的区别
void (*p)()是一个指向函数的指针,表示是一个指向函数入口的指地变量,该函数的返回类型是void类型。它的用法可参看下例:例如:有一返加void值的函数swap,(swap用来交换两个数)void (*p)(); /*定义指向函数的指针变量p*/p=swap; /*使指针变量p指向函数max*/(*p)(a,b); /*通过指针变量p调用函数max*/它等价于:转载 2015-03-04 22:05:42 · 10499 阅读 · 1 评论 -
argc 和 argv[]
int main(int argc,char *argv[])这样的main()函数常用在linux和nuix当中,是为了配合命令行和参数运行。int argc:命令行参数个数,通常为1,就是文件路径和文件名。char *argv[]:字符串数组,argv[0]存放程序路径和文件名,argv[1]存放参数,后面也都是参数,因为参数可能为多个字符,所以argv[]为字符指针数组。转载 2015-03-06 15:00:44 · 615 阅读 · 0 评论 -
Linux-hexdump命令详解
hexdump:查看一些二进制文件的内容,比如二进制文件中包含的某些字符串。可以将二进制文件转换为ASCII、10进制、16进制或8进制进行查看。-b 每一字节以八进制显示,一行共16个字节,一行开始以十六进制显示偏移值; 0000000 177 105 114 106 002 001 001 000 000 000 000 000 000 000 000 000-c转载 2015-03-12 16:40:13 · 4781 阅读 · 0 评论 -
byte , bit , kB ,B MB KB GB TB之间的关系
1 byte (B) = 8 bits (b) 字节=8个二进制位 1 Kilobyte(K/KB)=2^10 bytes=1,024 bytes 千字节 1 Megabyte(M/MB)=2^20 bytes=1,048,576 bytes 兆字节 1 Gigabyte(G/GB)=2^30 bytes=1,073,741,824 bytes 千兆字节 1 Terabyte(T/TB)=转载 2015-03-13 16:06:25 · 7537 阅读 · 0 评论