精华内容
下载资源
问答
  • 首先要理解整数在机器内是如何用补码表示的:原码、补码、反码按位运算,就是对一个数(常量或变量)的二进制位与另一个数的对应二进制进行运算。位运算有:& 位逻辑与,1&1等于1,1&0等于0,0&1...

    首先要理解整数在机器内是如何用补码表示的:原码、补码、反码

    按位运算,就是对一个数(常量或变量)的二进制位与另一个数的对应二进制位进行运算

    位运算有:

    & 位逻辑与,1&1等于1,1&0等于0,0&1等于0,0&0等于0

    | 位逻辑或 ,1|1等于1,1|0等于1,0|1等于1,0|0等于0

    ^ 位逻辑异或 ,两个二进制位不同,结果为1,否则为0

    ~ 求反, 使一个数(常量或变量)的每一位变反,即0变1,1变0

    >> 右移, 对一个数(常量或变量)的每一位右移

    << 左移, 对一个数(常量或变量)的每一位左移

    例2.7.1 按位运算

    #include <iostream>
    using namespace std;
    int main()
    {
    	short int  a,b,c;
    	a=11;               //a的二进制表示 00000000  00001011
    	b=39;               //b的二进制表示 00000000  00100111
    	c=-23;              //c的二进制表示 11111111  11101001
    	cout<<(a&b)<<endl;  //   a&b的结果  00000000  00000011
    	cout<<(a|b)<<endl;  //   a|b的结果  00000000  00101111
    	cout<<(a^b)<<endl;  //   a^b的结果  00000000  00101100
    	cout<<(~a)<<endl;   //   ~a的结果   11111111  11110100
    	cout<<(c>>2)<<endl;  // c>>2的结果  11111111  11111010
    	cout<<(a<<2)<<endl;  //左移一位相当于乘2运算,这里左移了2位	
    	return 0;
    }
    

    6723e4543ac538cb172776da891730a5.png
    程序运行的输出结果

    计算机内,整数是用补码表示的,能理解补码,就能解读程序的输出结果。

    3a300d5f990f26e3d73d916f74ca03d1.png

    移位运算实现整型变量a乘2(a<<2)或除2(a>>1)运算,效率比a*2或a/2运算高。

    看看高手是如何活用位运算的

    god-jiang:神级运算——位运算zhuanlan.zhihu.com
    908dfa91ea3d4caef44298c328c8b1af.png
    展开全文
  • 好那么关于二进制的我们说了这么多,再说说 逻辑"&",今天主要根据JDK1.7HashMap源码indexFor方法来进行解析。讲其的运算规则详情与其作用。 一、二进制运算结构解析 大家应该都知道程序有很多进制,好的那...

    背景摘要:二进制是计算机专业的入门篇,01010101010101010011001011011010100101010101010101010101010100101101011001010110101011110101010101010101011。好那么关于二进制的我们说了这么多,再说说 逻辑"&",今天主要根据JDK1.7HashMap源码indexFor方法来进行解析。讲其的运算规则详情与其作用。

    目录

    一、二进制运算结构解析

    二、HashMap源码IndexFor方法 "&"字符的运用


    一、二进制运算结构解析

    大家应该都知道程序有很多进制,好的那我们今天只讲老祖宗二进制运算结构步骤。

    首先是计算16(偶数)的二进制。运算为不断除2,首先除2为8,余0,依次除尽。计算结果最终从下往上取值为10000。

    但一般最后为8尾数做填充,故最终值为00010000。

    再来计算15(奇数)的二进制。

    同理:(15-1)/2 = 7 余1 。依次(n-1)/2,得出1111。填充四个0,最终值:00001111

     看完这些相信你会觉得很简单,当然也有在线的进制转换工具。点我

    那么今天的主角“&”。为什么说“&”是主角?我们能通过HashMap源码来了解他真正的作用,同时也能了解HashMap一个小细节知识点。由浅入深的慢慢的进入HashMap。

     

    二、HashMap源码IndexFor方法 "&"字符的运用

    你可能以为我只是要说“&”,其实我还要扯上:

    首先说说IndexFor方法在HashMap中主要是干嘛的:根据元素的HashCode来计算元素在HashMap集合(数组+链表)中对应链表的下标。那么既然是计算,HashMap中,存取都是用到了该方法的。且该方法决定了HashMap在put存值时存在哪个链表中。

    当然关于HashMap的知识不了解也没关系。来分析分析“&”计算。

    “&” 又称 与运算 如果两者都是为1,那么结果为1,否则就是0。

    1&0=0;0&1=0;1&1=1;0&0=0;

    那么再说说HashMap中的index运算。首先HashMap的初始容量为16。那么上文我们得知计算结果值为00010000;我们现在假设某元素的HashCode为103;对16进行计算结果。

    static int indexFor(int h, int length) {
        return h & (length-1);
    }

    通过工具计算我们得知103的编码为:01100111

    再将两者根据计算公式进行对比:

    结果值很明显为:0.那么我们发现偶数的对比为0。所以计算的索引为0。其次,104/105皆是0

    那么我们发现,“&”16(偶数)的情况都是0。从而导致索引冲突碰撞那么就极大的增加了HashMap中存取运算的速度。那么在HashMap运算“&”时做了 (length-1)。采用16-1=15(单数)从而结果就不会那么容易一致。

    最终结果对比如图:

     

    总结:

    二进制计算即除2到尽头止。JDK1.7中HashMap源码采用IndexFor方法进行逻辑与“&”的运算来进行索引位置的计算。同时通过 length-1来优化计算公式,避免索引出现高重复碰撞。

     

    展开全文
  • 二进制逻辑运算详解

    2009-08-17 19:04:43
    二进制数1和0在逻辑上可以代表“真”“假”、“是”“否”、“有”“无”。这种具有逻辑属性的变量就称为逻辑变量。 计算机的逻辑运算的算术运算的主要区别是:逻辑运算是按位进行的,位位之间不像加减运算...

    逻辑变量之间的运算称为逻辑运算。二进制数1和0在逻辑上可以代表“真”与“假”、“是”与“否”、“有”与“无”。这种具有逻辑属性的变量就称为逻辑变量。
         计算机的逻辑运算的算术运算的主要区别是:逻辑运算是按位进行的,位与位之间不像加减运算那样有进位或借位的联系。
        逻辑运算主要包括三种基本运算:逻辑加法(又称“或”运算)、逻辑乘法(又称“与”运算)和逻辑否定(又称“非”运算)。此外,“异或”运算也很有用。


        1、逻辑加法(“或”运算)
        逻辑加法通常用符号“+”或“∨”来表示。逻辑加法运算规则如下:
        0+0=0, 0∨0=0
        0+1=1, 0∨1=1
        1+0=1, 1∨0=1
        1+1=1, 1∨1=1
        从上式可见,逻辑加法有“或”的意义。也就是说,在给定的逻辑变量中,A或B只要有一个为1,其逻辑加的结果为1;两者都为1则逻辑加为1。


        2、逻辑乘法(“与”运算)
        逻辑乘法通常用符号“×”或“∧”或“·”来表示。逻辑乘法运算规则如下:
        0×0=0, 0∧0=0, 0·0=0
        0×1=0, 0∧1=0, 0·1=0
        1×0=0, 1∧0=0, 1·0=0
        1×1=1, 1∧1=1, 1·1=1
        不难看出,逻辑乘法有“与”的意义。它表示只当参与运算的逻辑变量都同时取值为1时,其逻辑乘积才等于1。


        3、逻辑否定(非运算)
        逻辑非运算又称逻辑否运算。其运算规则为:
        0=1 非0等于1
        1=0 非1等于0


        4、异或逻辑运算(半加运算)
        异或运算通常用符号"⊕"表示,其运算规则为:
        0⊕0=0 0同0异或,结果为0
        0⊕1=1 0同1异或,结果为1
        1⊕0=1 1同0异或,结果为1
        1⊕1=0 1同1异或,结果为0
        即两个逻辑变量相异,输出才为1

    展开全文
  • 首先要理解整数在机器内是如何用补码表示的:原码、补码、反码按位运算,就是对一个数(常量或变量)的二进制位与另一个数的对应二进制进行运算。位运算有:& 位逻辑与,1&1等于1,1&0等于0,0&1...

    首先要理解整数在机器内是如何用补码表示的:原码、补码、反码

    按位运算,就是对一个数(常量或变量)的二进制位与另一个数的对应二进制位进行运算

    位运算有:

    & 位逻辑与,1&1等于1,1&0等于0,0&1等于0,0&0等于0

    | 位逻辑或 ,1|1等于1,1|0等于1,0|1等于1,0|0等于0

    ^ 位逻辑异或 ,两个二进制位不同,结果为1,否则为0

    ~ 求反, 使一个数(常量或变量)的每一位变反,即0变1,1变0

    >> 右移, 对一个数(常量或变量)的每一位右移

    << 左移, 对一个数(常量或变量)的每一位左移

    例2.7.1 按位运算

    #include <iostream>
    using namespace std;
    int main()
    {
    	short int  a,b,c;
    	a=11;               //a的二进制表示 00000000  00001011
    	b=39;               //b的二进制表示 00000000  00100111
    	c=-23;              //c的二进制表示 11111111  11101001
    	cout<<(a&b)<<endl;  //   a&b的结果  00000000  00000011
    	cout<<(a|b)<<endl;  //   a|b的结果  00000000  00101111
    	cout<<(a^b)<<endl;  //   a^b的结果  00000000  00101100
    	cout<<(~a)<<endl;   //   ~a的结果   11111111  11110100
    	cout<<(c>>2)<<endl;  // c>>2的结果  11111111  11111010
    	cout<<(a<<2)<<endl;  //左移一位相当于乘2运算,这里左移了2位	
    	return 0;
    }
    

    f52ce530dbf5ced53093b279be858507.png
    程序运行的输出结果

    计算机内,整数是用补码表示的,能理解补码,就能解读程序的输出结果。

    ab30d10021e819c0606e7d8a79f79cc8.png

    移位运算实现整型变量a乘2(a<<2)或除2(a>>1)运算,效率比a*2或a/2运算高。

    看看高手是如何活用位运算的

    god-jiang:神级运算——位运算zhuanlan.zhihu.com
    8e90139e314110385bcda3aeedd91cd7.png
    展开全文
  • 下面从逻辑右移和算术右移的角度进行分析。 【分析】 1 逻辑右移和算术右移 逻辑右移,移走的位填充为0;算术右移,移走的位填充符号位有关,例如如果为负数,则移走的位填充为1。 2 unsigned int 和 int ...
  • 今天来讲讲二进制与运算二进制相信大家都知道,就是只有0和1,逢2进1。 那么位运算又是什么呢? 程序中的所有数在计算机内存中都是以二进制的形式储存的。位运算说穿了,就是直接对整数在内存中的二进制位...
  • 二进制的位运算详解

    千次阅读 2017-12-19 18:25:30
    ① 将数转化为二进制(实际机器操作中本身就是二进制,这里的意思是人工计算) ② 每一位都进行如下运算: a) 1与1与运算得1 b) 1与0(0与1)与运算得0 c) 0与0与运算得0 两个数按位进行或运算特点有: ...
  • 二进制常用运算简介:逻辑变量之间的运算称为逻辑运算二进制数1和0在逻辑上可以代表“真”“假”、“是”“否”、“有”“无”。这种具有逻辑属性的变量就称为逻辑变量。 计算机的逻辑运算的算术运算的主要...
  • 二进制常用运算 ... 计算机的逻辑运算的算术运算的主要区别是:逻辑运算是按位进行的,位位之间不像加减运算那样有进位或借位的联系。 逻辑运算主要包括三种基本运算逻辑加法(又称“或”运算)、逻辑...
  • 什么是位运算 程序中的所有数在计算机中都是以...举个例子,6的二进制是110,11的二进制是1011,那么6 and 11的结果是2,他的二进制对应位进行逻辑运算的结果(0标识false,1表示true,空位都当0处理): 110 ...
  • 位运算符是把数字看作二进制数来进行计算的,因此,需要先将要执行运算的数据转换为二进制,然后才能执行运算。Python中位运算符有(&)、或(|)、异或(^)、取反(~)、左移位(<>)。注:整形数据在内存中以...
  • <h2>JS 使用二进制运算的一些例子 我举得例子肯定不全,欢迎大家头脑风暴~ | 运算符 | 用法 | 描述 | | --- | --- | --- | | 按位(AND) | <code>a & b</code> | 对于每一个比特位࿰...
  • 逻辑运算:当0和1表示逻辑状态时,两个二进制数码按照某种特点的因果关系进行运算。 在逻辑代数中,只有、或、非三种基本逻辑运算。 2、基本逻辑运算与、或、非 3、其他常用逻辑运算 ...
  • 两个二进制数异或的结果

    千次阅读 2015-05-05 10:56:54
    【面试题目 -亢龙有悔整理】两个二进制数异或结果是多少? a^b = |a-b| (按位相减取绝对值...二进制数的逻辑运算包括逻辑加法(“或”运算)、逻辑乘法(“运算)、逻辑否定(“非”运算)和逻辑“异或”运算。 (1
  • 二进制计算基础知识

    2020-06-25 08:48:04
    二进制计算基础 几个重要的计量单位: BYTE 字节 8BIT WORD 字 16BIT 2字节 DRORD 双字 32BIT 4字节 二进制逻辑运算 计算 2+3=? 第n位进行与运算求第n位的值是多少。
  • 二进制<1>

    2015-04-29 00:46:00
    Matrix67:位运算简介及实用技巧(一)基础篇 什么是位运算?程序中的所有数在计算机内存中都...举个例子,6的二进制是110,11的二进制是1011,那么6 and 11的结果就是2,它是二进制对应位进行逻辑运算的结果(...
  • 目录一 各种进制位运算(针对补码进行的!...)对比二 原码、反码、补码机器数和真值机器数(理解:带符号的二进制)真值(理解:带符号的十进制)原码, 反码, 补码的基础概念和计算方法原码反码...
  • 统计二进制中1的个数和 - 位运算

    千次阅读 2013-04-30 18:50:59
    (1)、按位与(&),将两个操作数化为二进制后并将对应的每一位分别进行逻辑与操作。(a%(2^n)=a&(2^n-1)) (2)、按位或(|),将两个操作数化为二进制后并将对应的每一位分别进行逻辑或操作。 (3)、按位异或(^),和以上...
  • 计算机中采用二进制主要原因

    千次阅读 2019-09-26 13:42:15
    技术实现简单,计算机由逻辑电路组成,逻辑...适合逻辑运算逻辑代数是逻辑运算的理论依据,二进制只有两个数码,正好与逻辑代数中的”真”和”假”相吻合 易于进行转换,二进制与十进制数易于互相转换 用二进...
  • 二进制位运算符

    2019-03-14 09:13:02
    位运算就是对二进制位的进行的位操作(逻辑操作)。 &amp;amp;amp; 与运算 | 或运算 ^ 异或运算 ~ 反码 &amp;amp;lt;&amp;amp;lt; 左移 &amp;amp;gt;&amp;amp;gt; 右移 &amp;amp;gt;...
  • java 二进制的问题

    2016-07-22 16:30:09
    现在在使用的计算机基本上都是二进制进行运算的。那么二进制有什么好处了?  (1)技术实现简单,计算机是由逻辑电路组成,逻辑电路通常只有两个状态,开关的接通断开,这两种状态正好可以用“1”和“0”表示。
  • 二进制枚举子集

    2018-03-03 12:33:28
    位的逻辑运算符:位运算是对二进制的每一位进行计算,所以每一位只有0或1两种可能。常用的位运算符:与 &amp; 、或 | 、异或 ^ ,运算规则 与运算:两者都为1时,结果即为1,否则为0 。 或运算:两者都为0时,...
  • ) 参加运算的两个数据,按二进制进行运算运算规则:0&0=0; 0&1=0; 1&0=0; 1&1=1; 即:两位同时为“1”,结果才为“1”,否则为0 按位或运算符(|) 参加运算的两个对象,按二进制位...
  • 在前面学习了阈值分割,这样得到的图像往往是值图,有了值图之后就可以利用值图之间进行逻辑运算,在OpenCV里提供了bitwise_and、bitwise_or、bitwise_xor、bitwise_not这四个按位操作函数。 bitwise_and是对...
  • 与运算3.异或运算4.非运算三、逻辑运算应用1.如何利用CPU进行2+3的运算?2.获取某个值的第N位3.加密算法 前言 需要进制转换的基础 Byte 字节 8bit Word 字 16Bit 2字节 DWord 双字 32Bit 4字节 一、数据宽度 ...
  • 将 nnn 与1进行与运算,循环判断 nnn 的最右一位是否为1,每判断完一次后将 nnn 右移一位(逻辑右移,即无符号右移“>>>”) notes: 题设要求将 n 看作无符号数,但Java是将输入的 n 看作有符号数的,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,091
精华内容 436
关键字:

二进制进行逻辑与运算