`
Tonyguxu
  • 浏览: 278553 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

【编程珠矶】开篇 千万号码的排序问题

 
阅读更多

注:学习了《编程珠矶》第一章,将涉及的一些知识点整理如下

 

value-->index 将某个数转化为位图的索引,如要表示value=2,即将位图index=2上的value赋为1(00100000.。。)

 

位图数据结构

~位反

<< 位左移

>> 位右移

& 位与 : 同为1(真)为1

| 位或 :只要有一个为1(真)则为1

^ 位异或 :1 和 0为1

 

0,1 | 1 = 1,1    ==> 或1,都成1

0,1 | 0 = 0,1

0,1 & 1 = 0,1

0,1 & 0 = 0,0  ==> 与0,都成0

0,1 ^ 1 = 1,0  ==> 异或1,变反

0,1 ^ 0 = 0,1

掩码
掩码在计算机学科及数字逻辑中指的是一串二进制数字,通过与目标数字的按位操作,达到屏蔽指定位而实现需求。
示例:创造一个掩码msk把一个指令cmd的第0~3位(右边第一位为0位)清零:

指令 cmd = 0110011011
创造掩码 msk = 0000001111

用掩码的反码~msk和指令cmd做按位与运算 cmd & ~msk = 0110011011 & 1111110000 = 0110010000则指定的第0~3位已被清零。

 

    #define BITS_PER_BYTE 8  
    #define BITS_PER_INT (BITS_PER_BYTE * 4)  
    // set the bit of the int specified by index to 1.  
    // the index is zero-based, counting from the left(the higher end)  
    inline void pearl_int_set(int* data, int index)  
    {  
        int mask = 1 << (BITS_PER_INT - 1 - index);  
        *data |= mask;  
    }  
      
    // test whether a bit of the int specified by index is 1.  
    // the index is zero-based, counting from the left(the higher end)  
    inline int pearl_int_test(int* data, int index)  
    {  
        int mask = 1 << (BITS_PER_INT - 1 - index);  
        return (*data) & mask;  
    }  
      
    // set a bit of the int specified by bit_index to 0.  
    // the index is zero-based, counting from the left(the higher end)  
    inline void pearl_int_clear(int *data, int bit_index)  
    {  
        int mask = ~(1 << (BITS_PER_INT - 1 - bit_index));  
        *data &= mask;  
    }  
      
    // get the right(lower) part of the int.  
    inline int pearl_int_right(int *data, int count)  
    {  
        int mask = 1;  
        while(count > 0) {  
            mask = mask << 1 + 1;  
        }  
        return *data & mask;      
    }  
      
    // get the left(upper) part of the int value  
    inline int pearl_int_left(int *data, int count)  
    {  
        int mask = 1;  
        count = BITS_PER_BYTE - count;  
        while (count > 0) {  
            mask = mask << 1 + 1;  
        }  
      
        mask = ~mask;  
        return *data & mask;  
    }  
      
    // set a bit of the speicified memory area to 1.  
    // @warning this function does NOT perform error checking.  
    inline void pearl_set(int *bitplane, int index)  
    {  
        int offset = index / BITS_PER_INT;  
        int pos = index - offset * BITS_PER_INT;  
      
        pearl_int_set(bitplane + offset, pos);  
    }  
      
    // set a bit of the specified memory area to 0.  
    // @warning this function does NOT perform error checking.  
    inline void pearl_clear(int *bitplane, int index)  
    {  
        int offset = index / BITS_PER_INT;  
        int pos = index - offset * BITS_PER_INT;  
      
        pearl_int_clear(bitplane + offset, pos);  
    }  
      
    // test if a bit of the specified memory area is 1.  
    // @warning this function does NOT perform error checking.  
    inline int pearl_test(int *bitplane, int index)  
    {  
        int offset = index / BITS_PER_INT;  
        int pos = index - offset * BITS_PER_INT;  
      
        return pearl_int_test(bitplane + offset, pos);  
    }  
 

如果待排序数据都在内存中

 

分享到:
评论

相关推荐

    基于问题求解的C语言开篇教学研究.pdf

    综上所述,文章《基于问题求解的C语言开篇教学研究》针对C语言开篇教学中常存在的问题,提出了一套以培养问题求解能力为核心的教学目标体系和教学方法,强调在教学过程中应注重问题的提出、分析、模型建立和编程实现...

    C#编程自学之开篇介绍

    【C#编程自学之开篇介绍】 C#是一种由微软公司开发的面向对象的编程语言,专门为.NET框架设计。它的诞生吸收了C++和Java的精髓,并结合了VB6的某些特性,使得C#成为了一种高效且易于管理的编程语言。C#的关键优势...

    编程珠玑 第二版 修订版

    第1章 开篇 3 1.1 一次友好的对话 3 1.2 准确的问题描述 4 1.3 程序设计 4 1.4 实现概要 5 1.5 原理 6 1.6 习题 7 1.7 深入阅读 9 第2章 啊哈! 算法 11 2.1 三个问题 11 2.2 无处不在的二分搜索 12 2.3 ...

    施耐德可编程控制器(PLC)PL707WIN编程软件操作手册.pdf

    最后,手册还可能提供了关于软件的常见问题解答、故障排除以及最佳实践的建议,帮助用户快速解决在编程或操作过程中可能遇到的问题,提高工作效率。 由于内容中提供的文本片段存在一些识别错误和不连贯之处,以上...

    编程珠玑(第2版·修订版)1

    《编程珠玑(第2版·修订版)》是一本...这本书通过丰富的习题和深入阅读推荐,鼓励读者实践和探索,旨在提升程序员对复杂编程问题的理解和解决能力,无论对于初学者还是经验丰富的开发者,都是极有价值的参考资料。

    fagor内置PLCI编程手册.pdf

    FAGOR数控系统内置PLCI编程手册是一份关于FAGOR数控系统中内置PLCI(可编程逻辑控制器集成)模块的编程指南。这份手册详细介绍了如何使用PLCI进行编程,包括基础知识、信号处理、程序编辑以及PLCI与数控系统CNC之间的...

    Java并发编程的艺术

    本章不仅详细介绍了这些工具类的功能和用途,还提供了一系列实用的例子,帮助读者理解如何利用这些工具来解决常见的并发编程问题。这些工具类的应用范围广泛,从简单的计数器到复杂的协作模式都有涉及。 #### 九、...

    计算机学科经典书籍—编程珠玑

    该书由美国著名计算机科学家Jon Bentley撰写,通过对一系列实际编程问题的探讨,不仅提供了具体的解决方案,还深刻揭示了程序设计的基本原理和技术。 #### 二、书籍特色 1. **问题导向**:本书以解决实际编程问题...

    vc++.net高级编程

    《VC++.NET高级编程》是一本深入探讨Microsoft的C++编程环境——Visual C++.NET的专著。这本书针对的是那些已经对C++有一定基础,并希望进一步提升在.NET平台上的开发技能的程序员。以下是对该书内容的详细解读: 1...

    计算机编程艺术-关于算法介绍及分析的书籍

    "算法"是本书的核心,作者详细剖析了排序、搜索、图论、动态规划等领域的经典算法,让读者能够理解算法的工作原理并学会在实际问题中应用。书中深入讨论了算法的时间复杂度和空间复杂度,帮助读者评估算法效率,进行...

    [并行计算——结构·算法·编程].陈国良.文字版

    并行计算 陈国良编著 呵呵 大家来下载 是第三版《并行计算:结构•算法•编程(第3版)》是并行计算系列丛书之开篇,它以并行计算为主题,围绕并行计算机、并行算法和并行程序设计展开讨论,强调融并行计算机体系结构、...

    多线程编程的入门教程

    文档开篇提出了一个单线程程序中存在的问题,即在执行耗时操作时,程序无法响应其他用户操作,从而引出多线程编程的必要性。这一节涉及了进程和线程的基本概念,说明了它们都是操作系统中用于描述程序运行状态的抽象...

    UNIX环境高级编程_第二版中文

    相信知道这本书的人很多,这是讲解Unix编程的经典书籍,由于Linux属于类Unix系统,所以,学习Linux编程,这本书不可以少。 这本书的开篇首先讲的是对文本文件的操作,对了,就是那几个我们常常看见的函数--open,...

Global site tag (gtag.js) - Google Analytics