C/C++
文章平均质量分 74
syzcch
这个作者很懒,什么都没留下…
展开
-
C语言利用setjmp/longjmp实现模仿C++的层次异常处理机制
传统C语言异常处理机制传统的C语言异常处理,一般情况下为被调用者通过设置不同的返回值或者设置一个表示错误的全局变量值,以代表执行正常或者是发生了各种各样的错误,异常,警告等等。而调用者则通过被调用者的返回值来判断是否发生了异常,并对异常进行处理。以下是这种处理方式的简单示例:fun1(){....int result=fun2();switch(result){case 1原创 2012-10-16 13:38:00 · 2232 阅读 · 1 评论 -
二分查找位运算——32位整数中寻找第一个为1的位
问题描述在程序设计中经常会遇到这样一个问题,即在一个32位整数中,从右到左寻找第一个为1的位。这样的问题是很常见的,而面对这样一个问题,一种常见的解法就是逐位的遍历这个整数中的所有位,直到遇到了为1的位。若第一个为1的位出现在高位区域,逐位查找比较的方法会比较非时间。换一种思路当我们在一个数组中寻找某数的时候,我们有什么办法?简单的顺序的遍历整个原创 2012-12-13 09:47:50 · 6291 阅读 · 8 评论 -
递归生成集合的全排列
题目描述递归,生成集合的全排列,也是在笔试面试中经常考的问题。全排列问题一般要求递归或非递归的解决,非递归按序输出集合的全排列在我的另一篇博客中有介绍(http://blog.csdn.net/syzcch/article/details/8136218),这里主要介绍递归生成集合全排列的方法。递归思路递归的解这道题的方法相对于非递归的解法来说较为简原创 2012-12-10 09:34:10 · 1774 阅读 · 0 评论 -
c编程技巧——获取可用的处理器(CPU)核数
需求我们在编程时,尤其是在涉及到系统环境的程序开发中,可能会需要动态的获得当前机器中可用的CPU核数。例如,当我们需要做并行计算时,我们可能会根据CPU核数来决定并行度,因此我们需要在C程序中获得当前机器中可用的CPU核数。方法为了跨平台的需要,我们需要同时考虑在不同平台下获取机器处理器核数的方法。在这里我们考虑Linux与Windows两个平台,不同的平台有不同的方法来获取处原创 2012-10-29 16:24:22 · 19363 阅读 · 2 评论 -
算法——求数组中最大子数组和
题目有一输入数组,数组里面的数字都是整数,可能为正,可能为负,也可能是0,要求该输入数组中最大子数组的和。题目分析面对这样的一个问题,首先需要仔细分析问题的条件与问题所求。这个问题提供了一个输入数组,里面会有若干个元素,每个元素可以为正数,可以为负数,也可以为0。而题目要求输出该数组中最大子数组的和,注意是要求连续相邻的若干元素组成的子数组,并且保证该子数组的和最大。原创 2012-11-20 11:02:05 · 1874 阅读 · 4 评论 -
小议C++中const的实现机制
问题C语言以及C++语言中的const究竟表示什么?其具体的实现机制又是如何实现的呢? 本文将对这两个问题进行一些分析,简单解释const的含义以及实现机制。问题分析简单的说const在C语言中表示只读的变量,而在C++语言中表示常量。关于const在C与C++语言中的使用以及更多的区别,以后有时间另开一贴说明。那么const究竟是如何实现的呢? 对原创 2012-12-02 10:10:01 · 6169 阅读 · 2 评论 -
算法——字节高低位交换
问题对一个字节数据,逐个交换其高低位,例如11010001,经过0-7,1-6,2-5,3-4对应位的交换,变成10001011 。解决思路对于该问题,我们最先想到的是对原字节通过移位操作来逐位处理,使用另一个变量来存储交换后的结果。这种解决方案处理起来思路清晰,编写代码应该不难。下面是该思路对应的代码:unsigned char shift_fun1(un原创 2012-11-15 08:50:08 · 26681 阅读 · 15 评论 -
C语言中有没有bool类型?
问题首先请大家回想一下,在你们所编写的C程序中,是否使用过bool(布尔)类型?bool类型一般用来表示真假,是程序设计中一个很基本的数据类型。但是,C语言里面并不直接支持bool类型。一些初学C语言,或者是对C语言不是很精通的朋友肯定觉得很奇怪,为什么在C++,JAVA等语言里使用的bool类型,在C语言里无法使用了呢?问题解析bool类型的变量,为0时表示为假,为非0时表示原创 2012-11-07 16:10:02 · 29531 阅读 · 0 评论 -
动态规划解决跳台阶问题
问题描述某互联网公司的一道面试题,题目是一个人上台阶,台阶有n级,他可以一次上1级,可以一次上2级,也可以一次上3级,问上这个n级的台阶一共有多少种上法。问题分析首先我们先归纳分析一下一些比较简单的情况:如果台阶只有1级,那么他一次就可以上去,很显然,上法只有1种;如果台阶有2级,那么他可以1-1,也可以直接上到2级,这时一共有2种上法;如果台阶有3级,那么他可以1原创 2012-11-13 12:52:16 · 3188 阅读 · 0 评论 -
关于C语言中的宏的一点点讨论
前言:熟悉C语言的朋友应该对宏不陌生, 宏在C语言程序开发中是经常使用的,使用其的主要目的是方便程序员的编程工作,并且能在一定程度上提高程序的效率。C语言中提供的宏定义命令是#define。下面就使用宏的几个小细节进行一些讨论。1,宏中使用()在宏中,尽量多使用(),不要觉得无所谓或者觉得使用不使用没有什么影响。请切记,在宏中尽量多使用(),这样才能尽量的保证你的宏的正确性原创 2012-08-21 22:51:20 · 1223 阅读 · 1 评论 -
Gray Code实现按序产生集合的所有子集
简介Gray Code,是几十年前贝尔实验室的科学家Frank Gray提出的一种编码方案,当时主要用于传输信号以防止出错。Gray Code 除了在通信,硬件设计领域中应用以外,在计算机相关科学的其他方面也有广泛的应用,例如按序产生集合的所有子集。Gray Code实现按序产生集合的所有子集子集的按序产生,这个概念很简单,举个例子,假设我们的集合为{a,b,c},那么按序产生原创 2012-08-26 18:45:09 · 2100 阅读 · 1 评论 -
C编程小技巧——结构体强制类型转换
问题前些天看一款数据库语法解析器的代码,其中的词法分析语法解析阶段,利用一个结构体存储所解析的SQL语句的类型,然后根据这个类型将改结构体强制转换为对应的另一结构体并赋值给他,以便做进一步的执行工作。举个简单的例子:存储语法解析后数据的结构体(注意,其只有一个元素)为:struct analyse{int type;};我们约定的不同的type代表不同的SQ原创 2012-11-06 10:38:56 · 6801 阅读 · 3 评论 -
非递归,按序输出集合的全排列
题目描述非递归,按序输出集合全排列,是在笔试面试中经常考的问题。递归输出集合的全排列相对来说还是比较简单的,而非递归实现这个问题需要一些小技巧。全排列是将集合中的元素(可以为数字,可以为字符),按照字典序生成所有排列的集合,并输出这些排列。以数字集合距离,集合{1,2,3}的按序全排列为:1 2 31 3 22 1 32 3 13 1 23 2 1这样3个元原创 2012-11-02 12:26:27 · 3057 阅读 · 5 评论 -
一道关于Linux系统下fork系统调用的面试题
相关知识:熟悉Linux平台开发的朋友应该都知道fork这个系统调用。Linux系统下,fork系统调用用于从当前进程(父进程)中创建一个新进程(子进程)。要使用fork,只需在程序中引用unistd.h库,即#include 。fork每被调用一次,产生两次值(父进程一次,子进程一次),子进程中的返回值为0,而父进程中返回值是子进程的进程号。所以通过返回值就可以判定当前进程是父进原创 2012-08-13 22:33:12 · 1982 阅读 · 3 评论 -
算法——递归生成集合的所有组合
题目描述输入一个集合,需要生成该集合所能得出的所有组合。举例说明:若输入集合为{1,2} , 需要生成的组合有{1},{1, 2},{2} 。该题目与生成集合的全排列有很多相似之处,同样也是一个很经典的问题。解决思路在我前面的一篇文章:Gray Code实现按序产生集合的所有子集 http://blog.csdn.net/syzcch/article/det原创 2013-01-06 11:36:32 · 4162 阅读 · 1 评论