二进制数的插入

位操作,掌握一些清零,置1和取每一位的技巧。

//题目描述
//
//有两个32位整数n和m,请编写算法将m的二进制数位插入到n的二进制的第j到第i位, 其中二进制的位数从低位数到高位且以0开始。
//给定两个数int n和int m,同时给定int j和int i,意义如题所述,请返回操作后的数,保证n的第j到第i位均为零,且m的二进制位数小于等于i - j + 1。
//测试样例:
//1024,19,2,6
//返回:1100

class BinInsert {
public:
    int binInsert(int n, int m, int j, int i) {
        // write code here
        ////保证n的j到i位均为0,且m的二进制位数小于等于i-j+1
        //return n | (m << j);

        ////取m的每一位,和n的对应位相与
        //int k = 0;
        //while (m!=0)
        //{
        //    int bit = m & 1;
        //    if (bit)
        //    {
        //        n |= 1 << (k + j);//为1,这一位也要为1,所以或
        //    }
        //    else
        //    {
        //        n &= ~(1 << (k + j));
        //    }
        //    k++;
        //    m >>= 1;
        //}

        //清零的方式  //定义掩码
        int mask = ~(((1 << (i - j + 1)) - 1) << j);  //111->111000->000111;对后面的没有影响
        n &= mask;  //i~j位置为0
        n |= (m << j);

        return n;
    }
};
时间: 2024-08-27 07:42:13

二进制数的插入的相关文章

【暖*墟】 #trie# 字典树的运用

Trie,又称字典树 是一种用于实现字符串快速检索的多叉树结构. 每个节点都拥有若干个字符指针,若在插入或检索字符串时扫描到一个字符c , 就沿着当前节点的c这个字符指针,走向该指针指的节点. 下面我们来详细讨论Trie的基本操作过程. 初始化 一棵空Trie仅包含一个根节点,该点的字符指针均指向空. *********  根节点表示空串.********* 插入 当需要插入一个字符串S时,我们令一个指针P起初指向根节点. 然后,依次扫描S中的每个字符c. 1.若P的c字符指针指向一个已经存在的

MYSQL 插入二进制数的 2 种方法。

方法 1.insert into TableName set column =''; 方法 2.insert into TableName .... values(.....); ------------------------------------------------------------------------------------------------------------------------------------------ create table T(x bit(

Linux环境下MySQL数据库用SQL语句插入中文显示 “问号或者乱码 ” 问题解决!

问题: 在普通用户权限下执行 mysql -u root -p进入mysql数据库,中间步骤省略,插入数据:insert into 库名(属性)values('汉字'); 会出现如下提示:  Query OK, 1 row affected, 1 warning (0.00 sec)    表明出现错误,没有插入成功,然后执行select * from 表名   就会出现如下的问题:显示的表中出现乱码或者问号. 如图: 解决方案: 首先重新打开一个终端窗口(方便操作),进入root用户模式 执行

程序媛计划——mysql 插入、查找、修改、删除数据

#插入数据 [mysql>create table if not exists exam_score( ..>id int(4) not null primary key auto_increment, ..>name char(20) not null, ..>score double(6,2)); #用多个list插入多行数据 [mysql> insert into exam_score values (1,'Zhao',95.33),(2,'Qian',94.33),(

13- 整数划分插入乘号积最大(四)

/*                                            整数划分(四)时间限制:1000 ms  |  内存限制:65535 KB难度:3 描述 暑假来了,hrdv 又要留学校在参加ACM集训了,集训的生活非常Happy(ps:你懂得),可是他最近遇到了一个难题,让他百思不得其解,他非常郁闷..亲爱的你能帮帮他吗? 问题是我们经常见到的整数划分,给出两个整数 n , m ,要求在 n 中加入m - 1 个乘号,将n分成m段,求出这m段的最大乘积 输入    第

查找结点,创建节点,插入节点

1.查找节点介绍 2.创建节点 3.插入节点 4.程序(查找,并操作属性与文本节点) 1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="UTF-8"> 5 <title>Insert title here</title> 6 <script type="text/javascript" src="jquery-3.2.1.m

算法学习#09--用简单的思维理解选择、插入、冒泡和希尔排序

选择排序 1.原理 首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾.以此类推,直到所有元素均排序完毕. 2.特点 ①运行时间与输入无关. 无论输入初始状态如何,是否有序,都需要遍历数组来找出最小的元素.其他算法则更善于利用输入的初始状态来优化时间. ②数据移动次数最小. 如果某个元素位于正确的最终位置上,则它不会被移动.选择排序每次交换一对元素,它们当中至少有一个将被移到其最终位置上,因此对n个元素的表进

使用mysql数据库,插入数据出现问号(?)的问题,解决方法

首先,我用的mysql数据库是5.7.12版本. 出现的问题: 1.插入数据显示错误,插入不成功,出现:Incorrect string value: '\xCD\xF5\xD5\xBC\xBE\xA9' for column 'Sname' at row 1 2.插入中文,虽然插入成功,但是显示:?? 解决方法: 在my.ini文件中的  [mysqld]  中加入  #character-set-server=utf8 如图所示,必须在蓝圈的上方,就是说,蓝圈内的内容必须在[mysqld]的

大量数据快速插入方法探究[nologging+parallel+append]

大量数据快速插入方法探究 快速插入千万级别的数据,无非就是nologging+parallel+append. 1     环境搭建 构建一个千万级别的源表,向一个空表insert操作. 参考指标:insert动作完成的实际时间. SQL> drop table test_emp cascadeconstraints purge; Table dropped. SQL> create table test_emp as select *from emp; Table created. SQL&