`
raidyue
  • 浏览: 18782 次
  • 性别: Icon_minigender_1
  • 来自: 湖南常德
社区版块
存档分类
最新评论

位映射

阅读更多

 前些天讨论了位映射的内容,一个具体的例子就对于M个int的排重(就是排除重复的数),M至少大于内存的大小,这样我们就不能把所有的数直接放到数组里面。我们可以令M等于10亿,以32位的电脑为例,其最大可使用内存是4G,也就是2^32个字节,一个int占四个字节,能表示从2^32个数,所以内存是无法将这些数全部放进去的。但是用位映射的方式,我们可以用较小的位来表示int,也就是说我们可以用1位来表示一个int,也就是说原先需要4G容量的,现在我们只需要512M就可以满足要求。(不过这样做也是很暴力!)
 但是在java中我们是不能直接对为进行操作的,能操作的最小的是byte(即八位),所以我们需要一个大小为2^29的数组,当某个数出现后我们将其对应的位写为1,
 byte[] b = new byte[2^29];
 数组的每一个元素对应8个int对于每一个整数,首先读取该整数,做一下操作
 m = num / 8;
 n = num % 8;
 m为该数在数组中的位置,n为在8bit中的位置。
 b[m] = (byte) (b[m] | (1 << n));
 先对左移n位在对与数组进行或操作,这样就将数存放到数组里面,读取数组中的内容相当于是逆过程
 
 for (int i = 0; i < b.length; i++) {
   for (int j = 0; j < 8; j++) {
    if (!((b[i]&(1<<j))==0)) {  //用1与上数组元素的每一位
     int oriNum = b[i]*8+i;
     System.out.println(oriNum);
    }
   }
  }
  
 读取内容的时候先循环遍历数组的内容,然后用1与上数组元素的每一位,如果该位上为1,则说明该数存在,则将其输出,

分享到:
评论

相关推荐

    matlab开发-dvbs2设置信号构造和位映射

    本主题聚焦于"matlab开发-dvbs2设置信号构造和位映射",这意味着我们将探讨如何利用MATLAB来实现DVB-S2(数字视频广播-卫星-第二代)标准中的信号生成和位映射技术。 DVB-S2是一种先进的卫星数字电视传输标准,它...

    bit映射工具,demo版本

    2. **位映射**: 位映射是一种技术,它将数据存储为一系列的位,其中每个位代表特定的信息或状态。例如,一个位可能表示一个文件的存在,一个用户的权限,或者硬件设备的状态。通过位映射,可以高效地处理大量布尔值...

    DVB-S2 - 获取信号星座和位映射:该函数返回 DVB-S2 标准中指定的星座点和位映射。-matlab开发

    %DVBS2Constellation 信号星座取自 ETSI EN 302 307 % [星座,位图] = DVBS2星座(MODSCHEME,GAMMA) % 返回 DVB-S2 中指定的星座点和位映射% 标准 ETSI EN 302 307。输出向量 CONSTELLATION 包含% 星座点和输出...

    win32汇编内存映射文件之间的数据传递

    低32位映射大小 push ebx ; 文件句柄 push 0 ; 映射名称(空字符串表示私有) call CreateFileMapping add esp, 16 ; 清理堆栈 mov ecx, eax ; 存储映射对象句柄 ``` 在实际应用中,你需要根据具体的程序需求和...

    减少位交错极性编码调制系统的位映射搜索空间

    根据给定文件信息,以下是有关“减少位交错极性编码调制系统的位映射搜索空间”的相关知识点: 1. **极性编码(Polar Codes)**:极性编码是由Erdal Arikan在2009年提出的,它是一种信道编码方式,主要用于二进制...

    手机号码归属地映射

    最近查的涵盖以下号段 ,映射规则为前七位映射 电信 = ['133', '149', '153', '173', '177', '180', '181', '189', '199'] 联通 = ['130', '131', '132', '145', '146', '155', '156', '166', '171', '175', '176', ...

    DICOM图像读取以及窗宽,窗位调整

    例如,对于CT图像,窗宽设置为400,窗位设为40,意味着图像中只显示40-440的Hounsfield单位(HU),其他值将映射到最亮或最暗。 调整窗宽和窗位可以改变图像的视觉效果,突出不同组织或结构。例如,针对肺部图像,...

    lcx.exe32位和lcx64.exe位端口映射.rar

    LCX的32位和64位版本均支持这种功能,可以将内网服务的端口映射到公网可访问的端口,使得外部用户能够通过这个映射的端口与内网服务器建立连接。 `lcx64.exe`作为64位版本,除了基本的端口映射功能外,可能还包含更...

    C++ 可以解决64位程序调用32位库、双向信道跨进程间通信的文件映射处理类源码

    1初始化文件映射对象 2同步 3获取文件映射对象的映射视图 4释放文件映射对象的映射视图 5释放文件映射对象 源码包含了封装的功能模块类以及测试类, 全部源码都可以用VS2020编译通过,请放心使用! 友情提示,为了...

    位带操作(原理)1

    位带操作的原理是将寄存器的每个位映射到一个新的地址空间,即位带别名区,使得可以直接对寄存器的单个位进行读写操作,而无需处理整个32位寄存器。 1. **位带操作的本质**: 位带操作的核心在于将寄存器的每个位...

    8位1024到2000映射 学习

    8位1024到2000映射是一个在计算机科学和数字逻辑领域常见的问题,涉及到二进制编码、地址映射以及数据转换。在这个主题中,我们主要讨论如何用一个8位(即2^8 = 256个不同状态)的二进制数字系统来表示1024到2000...

    位带技术在STM32程序设计中的应用.pdf

    通过将位带区的每个位映射到位带别名区的一个字,可以通过对位带别名区相应字的读取和写入操作,改变原始位带区中对应位的值。这种映射方式大大简化了C语言中的复合位操作语句,避免了复杂的寄存器操作,进而减少了...

    STM32F4xx位带操作

    位带操作的核心思想在于利用内存映射技术,将GPIO端口寄存器中的每一位映射到独立的32位内存空间,这样就可以像访问普通内存一样直接对某个位进行操作。这种方式避免了通过复杂的掩码运算来实现对单个位的操作,使得...

    研华Webaccess技巧之---取位操作.rar

    3. **位映射**:位映射技术允许用户将物理设备的位地址映射到更易理解和管理的变量或标签上,提高系统的可读性和可维护性。在研华Webaccess中,可以创建位映射表,将设备的位地址关联到自定义的标签名。 4. **报警...

    MAX6954/MAX6955 LED显示驱动器连接两位LE

    MAX6954/MAX6955 LED显示驱动器允许用户驱动独立的LED数字或共用段驱动引脚,本应用笔记详细说明了数字位映射的相关步骤。Maxim的MAX6954和MAX6955LED显示驱动器可用于驱动LED数字,分别控制段驱动引脚。MAX6954/MAX...

    USB远程映射.rar

    1. usbredirector_setup64.exe 和 usbredirector_setup32.exe:这两个文件是USB Redirector的安装程序,分别适用于64位和32位操作系统。USB Redirector是一款软件工具,它能帮助用户将本地USB设备的连接权限扩展到...

    Cache和主存的三种映射方式

    ### Cache和主存的三种映射方式详解 #### 一、引言 在现代计算机系统中,为了提高CPU处理速度与内存访问效率之间的协调性,引入了高速缓冲存储器(Cache),作为CPU与主存之间的桥梁。Cache的主要作用是缓解CPU与...

    施耐德HMI跟PLC映射

    - PLC中以%MXx.x表示的单个位(位存储器),与HMI中的相应地址%MWx:Xy进行映射,其中x和y分别对应PLC中位的存储器号和位的编号。比如%MX0.7映射至HMI中的%MW0:X7。 - PLC中的字节(%MBx)、字(%MWx)、双字(%MDx)...

    身份证前6位号码区域映射表.xlsx

    身份证前6位号码区域映射表

    数据类型关系映射表

    - **解释**:MySQL 的位类型 `BIT` 在 JDBC 中也映射为 `BIT` 类型。 - **注意事项**:此类型常用于表示布尔值,但 MySQL 支持的值包括 `0`、`1` 和 `NULL`。转换时需要注意处理 `NULL` 值。 - **CHAR (MySQL) →...

Global site tag (gtag.js) - Google Analytics