- 浏览: 439125 次
- 性别:
- 来自: 深圳
最新评论
-
su6838354:
我有点疑问啊,thread1中的i自增的慢的话,thread2 ...
浅析pthread_cond_wait -
zeronever:
请问pthread_cond_signal有解锁操纵吗?我在p ...
浅析pthread_cond_wait -
paladin1988:
你这帖子真心不错。。
浅谈bitmap算法 -
parabellum_sky:
昨天还有个姑娘让我去考我说会考虑
个人日志
文章列表
负数的二进制表示方法 (转)
- 博客分类:
- c
假设有一个 int 类型的数,值为5,那么,我们知道它在计算机中表示为:
00000000 00000000 00000000 00000101
5转换成二制是101,不过int类型的数占用4字节(32位),所以前面填了一堆0。
现在想知道,-5在计算机中如何表示?
在计算机中,负数以原码的补码形式表达。
什么叫补码呢?这得从原码,反码说起。
原码:一个正数,按照绝对值大小转换成的二进制数;一个负数按照绝对值大小转换成的二进制数,然后最高位补1,称为原码。
比如 00000000 00000000 00000000 00000101 是 5的 原码。
...
-25的二进制存储方式 反码后+1 形成补码
3.5存储方式 浮点数的存储方式
12.5:
1. 整数部分12,二进制为1100; 小数部分0.5, 二进制是.1,先把他们连起来,从第一个1数起取24位(后面补0):
1100.10000000000000000000
这部分是有效数字。( ...
二叉树的深度优先遍历、广度优先遍历和非递归遍历
二叉树的遍历:
D:访问根结点,L:遍历根结点的左子树,R:遍历根结点的右子树。
给定一棵二叉树的前序遍历序列和中序遍历序列可以惟一确定一棵二叉树。
二叉树的深度优先遍历的非递归的通用做法是采用栈,广度优先遍历的非递归的通用做法是采用队列。
深度优先遍历二叉树。
1. 中序遍历(LDR)的递归算法:
若二叉树为空,则算法结束;否则:
中序遍历根结点的左子树;
访问根结点;
中序遍历根结点的右子树。
2. 前序遍历(DLR)的递归算法:
若二叉树为空,则算法结束,否则:
访问根结点;
...
二叉树的广度遍历
二叉树的广度遍历思想比较简单,即借助于队列对节点进行入队列和出队列,当节点出队列时对左右子节点进行判断,若存在左右子节点,则左右子节点入队列。
具体代码如下:
//建立二叉树,根据左小右大原则,不用递归,用循环
#include <iostream>
#include <assert.h>
using namespace std;
#define MAX 15
//定义结构体
typedef struct tree{
struct tree *left,*right;
int data;
}treenode,*b_t ...
浅谈bitmap算法
久闻《编程珠玑》一书中提出的bitmap算法之大名,只是没有深入的去研究,今天下午有兴致研究一番,才知道其中的玄机奥秘,不亚于KMP算法之巧妙,下面就由浅入深的谈谈bitmap算法。
一、bitmap算法思想
32 ...
KMP算法中的next数组的求法
- 博客分类:
- 数据结构
KMP算法中的next数组的求法
从《严书》上看到了KMP算法,看了一遍没懂,但觉得挺神奇的,就花费了几天时间深入的理解。
算法的原理其实不难,难的就是那个巧妙的next数组,这个next数组很吸引我,我的大部分时间也都是花费在这个数组上面的。这个next数组是KMP里面一个很关键的地方,对于在数据结构书上看过一遍整个算法流程的人,能够把next数组搞明白,整个KMP算法的整体思想就差不多理解了。然后在一些细节上面深入思考一下,就可以理解和领会改进的KMP算法。
一、KMP算法简单介绍
KMP算法是字符串匹配算法的一种,相对于朴素的字符串匹配算法而言,可以大大避免重复遍历的情况。此 ...
具体见:
http://www.codeproject.com/KB/office/BasicExcel.aspx
滑动动条控件Slider的用法
- 博客分类:
- VC++
在MFC中滑动条(CSliderCtrl)是个常用的控件,用法如下:
主要要方法有:
1、设置、取得滑动范围:
void SetRange( int nMin, int nMax, BOOL bRedraw = FALSE );
void GetRange( int& nMin, int& nMax ) const;
2、设置、取得按下左右箭头滑动间隔:
int SetLineSize( int nSize );
int GetLineSize( ) const;
3、设置、取得按下PgUp、PgDown时滑动间隔:
int SetPageSize ...
浅析Posix信号灯
- 博客分类:
- UNIX
Posix信号灯
信号灯分为有名信号灯和内存信号灯,本文只讲有名信号灯。
一 有名信号灯API
1.sem_open
函数原形:sem_t *sem_open(const char *name,int oflag,/*mode_t mode,unsigned int value*/);
参数:
name 信号灯的外部名字
oflag 选择创建或打 ...
所以如果在gcc的编译中(更准确的说是链接中)没有启动pthread的话,就会出现如下的链接错误。
pthread_test.c:(.text+0x8a): undefined reference to `pthread_create’
collect2: ld returned 1 exit status
另外一个参数-lpthread也能起到同样的作用。所以可以看出-pthread的本质应当时引入了thread对应的library。默认情况下,pthread对应的library在gcc编译链接中是不会被引入的。
浅析pthread_cond_wait
条件变量是利用线程间共享的全局变量进行同步的一种机制,主要包括两个动作:一个线程等待"条件变量的条件成立"而挂起;另一个线程使"条件成立"(给出条件成立信号)。为了防止竞争,条件变量的使用总是和一个互斥锁结合在一起。
一 pthread_cond_wait定义:
函数原型:int pthread_cond_wait(pthread_cond_t *cond, pthread_mutex_t *mutex)
参数: cond 条件变量 mutex 互斥锁
第一个参数*cond是指向一个条 ...
用fork创建子进程后执行的是和父进程相同的程序(但有可能执行不同的代码分支),子进程往往要调用一种exec函数以执行另一个程序。当进程调用一种exec函数时,该进程的用户空间代码和数据完全被新程序替换,从新程序的启 ...
fork 和 vfork
- 博客分类:
- UNIX
vfork用于创建一个新进程,而该新进程的目的是exec一个新进程,
vfork和fork一样都创建一个子进程,但是它并不将父进程的地址空间
完全复制到子进程中,因为子进程会立即调用exec,于是也就不会存放该地址空间。不过在子进程 ...
UNIX网络编程源码和头文件的使用
- 博客分类:
- Linux
1.编译《UNP》
http://www.unpbook.com/unpv13e.tar.gz
我们首先产生一个目录,以后自己的代码就敲在这个目录里。
mkdir /home/hehe/study/unp
仍然是下载到/home/hehe/download/,解压缩,进入目录
cd /home/hehe/download/unpv13e/
README文件中说的很详细:
========================================
Execute the following from the src/ directory:
./configure # tr ...
gedit和vim打开中文显示乱码(转)
- 博客分类:
- Linux
gedit和vim打开中文显示乱码,下面是解决方法
打开vim的配置文件,位置在/etc/vim/vimrc
在其中加入
set fileencodings=utf-8,gb2312,gbk,gb18030
set termencoding=utf-8
set encoding=prc
保存退出,此时vim就能正确显示中文了。
对于gedit,解决方法如下:
在终端中运行 gconf-editor
在打开的界面中选择: apps->gedit-2->preferences->encodings
在右边的auto_detected和shown_in_menu上点右键 ...