精华内容
下载资源
问答
  • 二进制数的逻辑运算

    2011-11-03 19:46:56
     “与”运算是实现“必须都有, 否则就没有”这种逻辑关系一种运算。 运算符为“? ”, 其运算规则如下: 0?0=0, 0?1=1?0=0, 1?1=1 b.“或”运算  “或”运算是实现“只要其中之一有, 就有”这种...
      
    a.“与”运算
            “与”运算是实现“必须都有, 否则就没有”这种逻辑关系的一种运算。 运算符为“?  ”, 其运算规则如下:
    0?0=0,        0?1=1?0=0,       1?1=1
    b.“或”运算
           “或”运算是实现“只要其中之一有, 就有”这种逻辑关系的一种运算, 其运算符为“+”。  “或”运算规则如下:
    0+0=0,      0+1=1+0=1,   1+1=1
    c.“非”运算
           “非”运算是实现“求反”这种逻辑的一种运算,如变量A的“非”运算记作       。 其运算规则如下:
    0的非=1,1的非=0

    d.“异或”运算
    “异或”运算是实现“必须不同, 否则就没有”这种逻辑的一种运算, 运算符为“”。其运算规则是:
    0异或0=0,0异或1=1,1异或0=1,1异或1=0

     

     

    一个数是2的幂次方,那么这个数的二进制位数中,只能有一位数值为1.
     
    例如:10000, 100, 1等等。
     
    从中可以看到,如果把这个数减去1,那么结果值的2进制位应该如下:1111,11,0等等。
     
    这两个数的特点是:他们做或的时候,得到的结果是他们的和,例如:
     
    10000和1111的或结果是11111, 100和11的或值是111,1和0的或是1。
     
    所以我们可以如果实现一个方法判断一个数是否是2的幂次方:
     
    Java代码
    public static boolean is2Power(int number){ 
        if(number<=0){ 
            return false; 
        } 
        return (number|(number-1))==(2*number-1); 

     
    做一个测试:
     
    Java代码
    for(int i = 0;i<1000;i++){ 
        if(is2Power(i)){ 
            System.out.println(i); 
        } 

     
     
    得到的结果是:
     
    Java代码




    16 
    32 
    64 
    128 
    256 
    512 
     
    补充(另一种实现方法):
     
    也可以通过对1的移位来实现。还是上面说的,如果一个数是2的幂,那么它的二进制表示中就只有一位1,所以如果对数1进行移位操作,总会在移到某个位的时候和这个数相等。所以这个实现如下:
     
    Java代码
    public static boolean is2Power(int number){ 
        int j = 1; 
        while (number>j) { 
            j<<=1; 
        } 
        return j==number?true:false; 

     
     
    验证:
     
    Java代码
    for(int i = 0;i<10000;i++){ 
        if(is2Power(i)){ 
            System.out.println(i); 
        } 

     
     
    结果:
    Java代码




    16 
    32 
    64 
    128 
    256 
    512 
    1024 
    2048 
    4096 
    8192

    展开全文
  • 本课程最大特点是采用全面图表方式进行介绍,把原本复杂转换方法以直观、简洁方式向大家展示不同数制间转换思路和方法,最终实现快速、轻松全面掌握数制方面技术理论。
  • 二进制算术1、逻辑运算1.1 加法运算规则1.2 减法运算规则1.3 乘法运算规则1.4 除法运算规则2、逻辑运算 ...二进制数的运算包括算术运算、逻辑运算。 1、逻辑运算 1.1 加法运算规则 规则:逢二进一 例子: 1.2 减


    \quad \quad二进制是计算技术中广泛采用的一种数制。二进制数据是用0和1两个数码来表示的数。它的基数为2,进位规则是“逢二进一”,借位规则是“借一当二”,由18世纪德国数理哲学大师莱布尼兹发现。当前的计算机系统使用的基本上是二进制系统,数据在计算机中主要是以补码的形式存储的.二进制数的运算包括算术运算、逻辑运算。

    1、算术运算

    1.1 加法运算规则

    规则:逢二进一
    例子
    在这里插入图片描述

    1.2 减法运算规则

    规则:借一当二
    例子
    在这里插入图片描述

    1.3 乘法运算规则

    规则:乘什么就是什么
    例子
    在这里插入图片描述

    1.4 除法运算规则

    规则:二进制的除法运算和十进制的类似,不存在进位、借位。
    例子
    在这里插入图片描述

    1.5 负数

    二进制下负数的表示: 正数的反码加1
    5: 00000000 00000000 00000000 00000101
    5的反码: 11111111 11111111 11111111 11111010
    -5: 11111111 11111111 11111111 11111011

    2、逻辑运算

    之前位运算博文

    展开全文
  • 首先要理解整数在机器内是如何用补码表示的:原码、补码、反码按位运算,就是对一个数(常量或变量)的二进制位与另一个数的对应二进制位进行运算。位运算有:& 位逻辑与,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
    展开全文
  • 整数的二进制表示与位运算.png十进制要理解整数的二进制,我们先来看下熟悉十进制。十进制是如此熟悉,我们可能已忽略了它含义。比如123,我们不假思索就知道它值是多少。但其实123表示1(10^2) + 2(10^1) ...

    f8228377f105

    整数的二进制表示与位运算.png

    十进制

    要理解整数的二进制,我们先来看下熟悉的十进制。十进制是如此的熟悉,我们可能已忽略了它的含义。比如123,我们不假思索就知道它的值是多少。

    但其实123表示的1(10^2) + 2(10^1) + 3*(100),(102表示10的二次方),它表示的是各个位置数字含义之和,每个位置的数字含义与位置有关,从右向左,第一位乘以10的0次方,即1,第二位乘以10的1次方,即10,第三位乘以10的2次方,即100,依次类推。

    换句话说,每个位置都有一个位权,从右到左,第一位为1,然后依次乘以10,即第二位为10,第三位为100,依次类推。

    正整数的二进制表示

    正整数的二进制表示与此类似, 只是在十进制中,每个位置可以有10个数字,从0到9,但在二进制中,每个位置只能是0或1。位权的概念是类似的,从右到左,第一位为1,然后依次乘以2,即第二位为2,第三位为4,依次类推。

    看一些数字的例子吧:

    f8228377f105

    image.png

    负整数的二进制表示

    十进制的负数表示就是在前面加一个负数符号-,例如-123。但二进制如何表示负数呢?

    其实概念是类似的,二进制使用最高位表示符号位,用1表示负数,用0表示正数。

    但哪个是最高位呢?整数有四种类型,byte/short/int/long,分别占1/2/4/8个字节,即分别占8/16/32/64位,每种类型的符号位都是其最右边的一位。

    为方便举例,下面假定类型是byte,即从右到左的第8位表示符号位。

    但负数表示不是简单的将最高位变为1,比如说:

    byte a = -1,如果只是将最高位变为1,二进制应该是10000001,但实际上,它应该是11111111。

    byte a=-127,如果只是将最高位变为1,二进制应该是11111111,但实际上,它却应该是10000001。

    和我们的直觉正好相反,这是什么表示法?这种表示法称为补码表示法,而符合我们直觉的表示称为原码表示法,补码表示就是在原码表示的基础上取反然后加1。取反就是将0变为1,1变为0。

    负数的二进制表示就是对应的正数的补码表示,比如说:

    -1:1的原码表示是00000001,取反是11111110,然后再加1,就是11111111。

    -2:2的原码表示是00000010,取反是11111101,然后再加1,就是11111110

    -127:127的原码表示是01111111,取反是10000000,然后再加1,就是10000001。

    给定一个负数二进制表示,要想知道它的十进制值,可以采用相同的补码运算。比如:10010010,首先取反,变为01101101,然后加1,结果为01101110,它的十进制值为110,所以原值就是-110。

    byte类型,正数最大表示是01111111,即127,负数最大表示是10000000,即-128,表示范围就是 -128到127。其他类型的整数也类似,负数能多表示一个数。

    负整数为什么采用补码呢?

    负整数为什么要采用这种奇怪的表示形式呢?原因是:只有这种形式,计算机才能实现正确的加减法。

    计算机其实只能做加法,1-1其实是1+(-1)。如果用原码表示,计算结果是不对的。比如说:

    f8228377f105

    image.png

    用符合直觉的原码表示,1-1的结果是-2。

    如果是补码表示:

    f8228377f105

    image.png

    结果是正确的。

    再比如,5-3:

    f8228377f105

    image.png

    结果也是正确的。

    就是这样的,看上去可能比较奇怪和难以理解,但这种表示其实是非常严谨和正确的,是不是很奇妙?

    理解了二进制加减法,我们就能理解为什么正数的运算结果可能出现负数了。当计算结果超出表示范围的时候,最高位往往是1,然后就会被看做负数。比如说,127+1:

    f8228377f105

    image.png

    计算结果超出了byte的表示范围,会被看做-128。

    十六进制

    二进制写起来太长,为了简化写法,可以将四个二进制位简化为一个0到15的数,10到15用字符A到F表示,这种表示方法称为16进制,如下所示:

    f8228377f105

    image.png

    可以用16进制直接写常量数字,在数字前面加0x即可。比如10进制的123,用16进制表示是0x7B,即123 = 7*16+11。给整数赋值或者进行运算的时候,都可以直接使用16进制,比如:

    int a = 0x7B;

    Java中不支持直接写二进制常量,比如,想写二进制形式的11001,Java中不能直接写,可以在前面补0,补足8位,为00011001,然后用16进制表示,即 0x19。

    查看整数的二进制和十六进制表示

    在Java中,可以方便的使用Integer和Long的方法查看整数的二进制和十六进制表示,例如:

    int a = 25;

    System.out.println(Integer.toBinaryString(a)); //二进制

    System.out.println(Integer.toHexString(a)); //十六进制

    System.out.println(Long.toBinaryString(a)); //二进制

    System.out.println(Long.toHexString(a)); //十六进制

    位运算

    位运算是将数据看做二进制,进行位级别的操作,Java不能单独表示一个位,但是可以用byte表示8位,可以用16进制写二进制常量。比如: 0010表示成16进制是 0x2, 110110表示成16进制是 0x36。

    位运算有移位运算和逻辑运算。

    移位有:

    左移:操作符为<

    无符号右移:操作符为>>>,向右移动,右边的舍弃掉,左边补0。

    有符号右移:操作符为>>,向右移动,右边的舍弃掉,左边补什么取决于原来最高位是什么,原来是1就补1,原来是0就补0,将二进制看做整数,右移1位相当于除以2。

    例如:

    int a = 4; // 100

    a = a >> 2; // 001,等于1

    a = a << 3 // 1000,变为8

    逻辑运算有:

    按位与 &:两位都为1才为1

    按位或 |:只要有一位为1,就为1

    按位取反 ~: 1变为0,0变为1

    按位异或 ^ :相异为真,相同为假

    大部分都比较简单,就不详细说了。具体形式,例如:

    int a = ...;

    a = a & 0x1 // 返回0或1,就是a最右边一位的值。

    a = a | 0x1 //不管a原来最右边一位是什么,都将设为1

    写在最后

    都看到这里,保存思维导图,顺便给个赞呗

    展开全文
  • 二进制数的运算

    2020-06-01 23:08:44
    有关二进制的算术运算、逻辑运算
  • 二进制数的运算方法

    千次阅读 2016-01-10 02:15:44
    二进制数的运算方法    电子计算机具有强大的运算能力,它可以进行两种运算:算术运算和逻辑运算。1.二进制数的算术运算 二进制数的算术运算包括:加、减、乘、除四则运算,下面分别予以介绍。(1)二进制数的...
  • 二进制的逻辑运算

    千次阅读 2013-06-23 20:50:09
    假设我们系统中,每一个基本功能对应一个权值,该值是一个无符号二进制数,为2n次方(n为正整数),系统所有功能对应权值不重复。 功能 权值 基本功能1 1 基本功能2 10 基本功能3 100...
  • 二进制数的运算规则

    万次阅读 2018-08-24 10:14:32
     (3) 乘法运算规则 例如:二进制数之间可以执行算术运算和逻辑运算,其规则简单,容易实现。  (1) 加法运算规则  0 + 0 = 0 例如: 1 1 0 1  0 + 1 = 1 +) 1 0 0 1  1 + 0 = 1  1 + 1 = 0 (产生进位) ...
  • 二进制数的运算方法    电子计算机具有强大的运算能力,它可以进行两种运算:算术运算和逻辑运算。 1.二进制数的算术运算  二进制数的算术运算包括:加、减、乘、除四则运算,下面...
  • 关于一个数的表示,我们常用的是十进制(人一般有十根手指嘛),另外也可以通过二进制、八进制、十六进制等表示数(可以相互转换),而计算机存储数...这里整理下数的表示方法,以及二进制数的运算。 参考文章: h...
  • 首先要理解整数在机器内是如何用补码表示的:原码、补码、反码按位运算,就是对一个数(常量或变量)的二进制位与另一个数的对应二进制位进行运算。位运算有:& 位逻辑与,1&1等于1,1&0等于0,0&1...
  • 二进制逻辑运算

    千次阅读 2016-08-02 20:14:15
    二进制是十分深刻思想,不是说,一个数字系统只有 0/1 就意味着它是二进制,而是某系统,仅有两种状态: 0/1 开关 阴阳 黑白 男女
  • 逻辑运算中两个十进制数进行运算,化为二进制后如果两个数位数不同是在高位补零还是直接把数字搬... 答案: 逻辑运算中两个十进制数进行运算,化为二进制后如果两个数位数不同,则对位数少那个数在高位补零. ...
  • 两个二进制数异或结果

    千次阅读 2015-05-05 10:56:54
    【面试题目 -亢龙有悔整理】两个二进制数异或结果是多少? a^b = |a-b| (按位相减取绝对值...二进制数的逻辑运算包括逻辑加法(“或”运算)、逻辑乘法(“与”运算)、逻辑否定(“非”运算)和逻辑“异或”运算。 (1
  • 按位逻辑运算,属性设置按位逻辑运算在高效率数据操作中应用很多,平时用高级语言里面,多数时候不需要我们去手动设置这些,因为已经被封装在各种模块/类里面了。在需要手动定义一些功能时候,这些运算方法很...
  • 负数的二进制表现形式:其实就是该数的绝对值取反+1. 进制转换(二进制,八进制,十进制,十六进制),原理解析 十六进制的表现形式: (2)(与、异或、左移、右移、三元运算符) 转载于:...
  • 二进制逻辑运算详解

    2009-08-17 19:04:43
    二进制数1和0在逻辑上可以代表“真”与“假”、“是”与“否”、“有”与“无”。这种具有逻辑属性的变量就称为逻辑变量。 计算机的逻辑运算的算术运算的主要区别是:逻辑运算是按位进行的,位与位之间不像加减运算...
  • 思路:2幂次的二进制只含有一个1,n-1则除了该位为0,其余皆为1,故而n & (n-1) = 0 import java.util.*; public class Main { public static void main(String[] args){ Scanner in = new Scanner(System...
  • 在写嵌入式程序中,常会将数据定义为unsigned int,这样定义有什么好处呢?下面从逻辑右移和算术右移角度进行分析。...C语言标准指出,无符号执行所有移位操作都是逻辑的,而对于有符号,采用哪种方式取...
  • 上节我们提到正整数相乘结果居然出现了负数,要理解这个行为,我们需要看下整数在计算机内部的二进制表示。 十进制 要理解整数的二进制,我们先来看下熟悉十进制。十进制是如此熟悉,我们可能已忽略了它...
  • 研究了光学负二进制并行...基于符号数字负二进制表达,提出了任意字长操作数的并行两步加法与一步减法。这些基本运算都可通过空间编码与解码的光学逻辑实现,从而提供了一种有效的光学算术-逻辑单元(ALU)设计方案。
  • 上节我们提到正整数相乘结果居然出现了负数,要理解这个行为,我们需要看下整数在计算机内部的二进制表示。 十进制 要理解整数的二进制,我们先来看下熟悉十进制。十进制是如此熟悉,我们可能已忽略了它...
  •  正整数的二进制表示与此类似, 只是在十进制中,每个位置可以有10个数字,从0到9,但在二进制中,每个位置只能是0或1。  例如: 0000 1010 ==> 10 负整数的二进制表示 (假定类型是byte)  十进制负数...
  • 输入的2位二进制数的范围为0~3D, 则输出的范围为5D~14D, 那么输出最少需要4位二进制数来表示. 设输出的4位二进制数从高位到低位分别为Y3、Y2、Y1、Y0, 根据"输出的二进制数比输入量的平方还大5"这一逻辑关系, 得到...

空空如也

空空如也

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

二进制数的逻辑运算