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

    2015-07-08 14:35:41
    二进制的运算有5种:& | ^ >。 主要讲一下左移与右移的规律: (1)左移:高位溢出,低位补零。  eg:010100 (2)右移:若移动前的二进制为正数,右移后低位溢出,高位补零;若移动前的二进制位负数,右移后...

    二进制的运算有5种:& | ^  <<   >>。

    主要讲一下左移与右移的规律:

    (1)左移:高位溢出,低位补零。

             eg:010100  <<2  得:010000

    (2)右移:若移动前的二进制为正数,右移后低位溢出,高位补零;若移动前的二进制位负数,右移后低位溢出 ,高位补1;

             eg:010010  >>2 得:000100

                    110010  >>2得:  111100

    大家明白了吗?大笑大笑安静

    展开全文
  • 计算机中的数值表示计算机以二进制表示数据,以表示电路中的正反。在二进制下,一个位只有0和1。逢二进一位。类似十进制下,一个位只有0~9。逢十进一位。101//5的二进制 ...二进制的最高位0代表数值为非负...

    计算机中的数值表示

    计算机以二进制表示数据,以表示电路中的正反。在二进制下,一个位只有0和1。逢二进一位。类似十进制下,一个位只有0~9。逢十进一位。

    101//5的二进制
     11//3的二进制
    

    计算机中存储数据,以字节为单位,一个字节有8个位,即可以表示-128~127范围的数字。上述的二进制的完整表示为:

    00000101//5的二进制
    00000011//3的二进制
    

    二进制的最高位0代表数值为非负数,1代表数值为负数,负数在下文提及,此处不赘述

    逻辑运算:与、或、非

    二进制有三种逻辑运算,也是为了便于二进制之间进行运算

    运算符号为&,运算规律是:真真为真,真假为假,假假为假

    1&1//1
    1&0//0
    0&0//0
    

    运算符号为|,运算规律是:真真为真,真假为真,假假为假

    1 | 1 //1
    1 | 0 //1
    0 | 0 //0
    

    运算符为~,取反的逻辑,运算规律:二进制位若为1,取反后为0。若为0,取反后为1

    ~1 //~00000001 =>11111110//代表-2 
    

    正数、负数的表示

    对于负数的表示,比较特殊,其有一条运算规律:对非负数的二进制进行取反、然后+1,便可得其负数的二进制表示,以3为例子:

       00000011//3的二进制
    //~00000011 对3进行取反,得到结果A
       11111100
    //对结果A进行+1
       11111101//-3在计算机中的最终表示,给计算机看的,不是给人看的,
    

    最终得出在一个字节下,11111101表示-3

    加减法运算过程

    计算机是用来计算的,那么必须支持最基本的加减法,这里以5和3的加减法为例:

    加法 5+3

    类似十进制的进位方式,二进制逢二进一

       00000101 //5的二进制
    +  00000011 //3的二进制
    =  00001000 //8的二进制
    
    减法 5-3

    对于5-3,可以看成 5+(-3),那么变相成加法运算了,然后按照加法的规则进行

       00000101//5的二进制
    +  11111101//-3的二进制
    = 100000010//258的二进制
    

    5+-3=258,看起来显然不正确,这里已经超过了一个字节的表示范围-128~127,溢出的部分会被忽略掉。

    1 00000010//超出的1部分,会被去掉,变成如下
      00000010//2
    

    利用溢出,就是可以实现减法的运算了:

       00000101//5的二进制
    +  11111101//-3的二进制
    =  00000010//2的二进制
    

    将32位的int,转成31个布尔值

    在java中,一个字节,也就是8位,而布尔值在java中至少占用一个字节(关于布尔值具体占几个字节,不在此处讨论),如果用户有7个属性,如是否为汉族、是否为男性等,如果全用布尔值来表示,就是7个字节。也可以用一个字节来表示,用0和1代表是和否。用1个字节替代7个字节来表示信息,空间节省80%以上,更别说是int等其他类型了:

    416129fa452438c96572439da4889d60.png

    需要解决如下几个问题:

    怎么读取某个位是0还是1?

    以第三位为例,即4的二进制00000100,利用与运算,可以值到某个位是否被置起来:

      00001001//9的二进制
    & 00000100//4的二进制
    = 00000000//0的二进制
    
     00001001 & 00000100 != 00000100 可判定第三位没有被置起
      00001101//13的二进制
    & 00000100//4的二进制
    = 00000100//4的二进制
     00001101 & 00000100 == 00000100 可判定第三位被置起了
    
    怎么在不影响其他位的情况下,把某个位设为1?

    这里会利用到或运算,我们还是以第三位为例子:

    //当第三位没有被置起时
      00001001//9的二进制
    | 00000100//4的二进制
    = 00001101//13的二进制
    //当第三位被置起时,设置前后,值应该是不变的
      00001101//13的二进制
    | 00000100//4的二进制
    = 00001101//13的二进制
    
    怎么在不影响其他位的情况下,把某个位设为0?

    这里会利用与、取反运算,我们仍以第三位为例子: 4的二进制00000100取反得到11111011

    //当第三位没有被置起时
      00001101//13的二进制
    & 11111011//4的二进制取反
    = 00001001
    

    综上所述,最后将上面过程实现为如下java:

    class BitUtil{
        public static boolean check(int flag, int bit){
            return (flag & bit) == bit;
        }
        public static int setBit(int flag, int bit, boolean value){
            if(value){
                return flag | bit;
            }else{
                return flag & (~bit);
            }
        }
    }
    展开全文
  • 二进制的运算 首先讲到的是十进制转化为二进制,因为以人类的思维观是十进制的。生活中,十进制的计数值早已经习惯了我们的生活,但在计算机领域,十进制是行不通的,在早期的晶体管中,只有高低电平两种状态之分。...

    二进制的运算
    首先讲到的是十进制转化为二进制,因为以人类的思维观是十进制的。生活中,十进制的计数值早已经习惯了我们的生活,但在计算机领域,十进制是行不通的,在早期的晶体管中,只有高低电平两种状态之分。认为为了直观的计数,将高低电平赋予了其数值的含义,即高为“1”,低为“0”。便于人类以数字形式的理解。进而演化出了二进制运算。
    那么怎样才能将十进制转换为二进制呐!人们依据十进制的思路,对其做了逆向运算,即按位做除法,取余数作为二进制数据位的组成,对于十进制数的小数部分则做乘法运算。
    for example:十进制数:16.34375,转换为二进制数:
    16/2=8余0;8/2=4余0;4/2=2余0;2/2=1余0;1/2=0余1;即整数部位的二进制组成为:10000(整数位的组成从后往前计数)
    0.34375x2=0.6875个位为0,;0.6875x2=1.375个位为1;0.375x2=0.75个位为0;0.75x2=1.5个位为1,0.5x2=1个位为1。即小数部分的二进制组成为:01011(小数位的组成从前往后计数)
    在计算机语言中,除了二进制外,人们为了在某些大容量的数据运算,抛开了冗繁的二进制计数,开始了八进制和十六计算值,那么又涉及到了运算位的转化。其实无论是从二进制转化为八进制或者是十六进制在原理上都是大同小异的。下面就来讲讲其转换的规律。
    二进制转换为八进制:
    仍然以16.34375为例进行讲解。
    先从整数部分开始分解:16=10000=010_000=20;
    小数部分的分解:0.34375=01011=010_110=26;
    那么十进制数16.34375转化为八进制的数为20.26
    总结:对于二进制数转化为八进制的规律,整数部分,从右到左每三位一组,不足3位的高位补0,小数部位,从左到右每3位为一组,不足三位低位补0。
    二进制转换为八进制的方法介绍完后,接下来讲解二进制转换为十六进制。
    先从整数部分开始分解:16=10000=0001_0000=10;
    小数部位的分解为:0.34375=01011=0101_1000=58;
    那么十进制数16.34375转化为十六进制数为10.58

    对于上面的各个进制之间的转换介绍完后,接下来介绍一下进制之间的运算,在人类的思维里,早已经习惯了十进制的加减乘除,同理,二进制的加减乘除与十进制的思维方式也是一样。
    譬如:十进制运算:3+2=5;
    二进制运算:0011+0010=0101;
    0011
    + 0010
    -------------
    0101
    雷同于十进制的算法,只不过是数据位满2往前进一。

    对于以上进制的转换讲解完全后,下面来讲一下,二进制中所涉及到的原码,补码,反码之间的关系。
    何为数据原码,原码即在数据位的基础上加上了符号为而已,在计算机领域“+”的符号位为0,“-”的符号位为1,

    			0000					 0			0						0000
    			1001					-1			1						0001
    			1010					-2			2						0010
    			1011					-3			3						0011
    			1100					-4			4						0100
    			1101					-5			5						0101
    			1110					-6			6						0110
    			1111					-7			7						0111
    			其数值的所在范围为(-2^3-1到2^3-1)
    

    数据的反码就是在原码的基础上,做了一定的改变而已,符号位不变,数据位取反。

    			0000	  				 0			0						0000
    			1110					-1			1						0001
    			1101					-2			2						0010
    			1100					-3			3						0011
    			1011					-4			4						0100
    			1010					-5			5						0101
    			1001					-6			6						0110
    			1000					-7			7						0111
    

    反码在做数据加减运算时,会出错,所以在计算机运算中都不会采用。
    接下来讲一下补码的构成,以及其运算过程。
    何为补码?
    正数与原码一样,数据位在反码的基础上加1

    							    	0				  					0000
    			1111					-1			1						0001
    			1110					-2			2						0010
    			1101					-3			3						0011
    			1100					-4			4						0100
    			1011					-5			5						0101
    			1010					-6			6						0110
    			1001					-7			7						0111
    			1000					-8
    

    用补码进行加减运算:
    1-2=0001+1110=1111=-1
    1-1=0001+1111=0000=0
    总结:补码在做符号的加减运算时没有任何问题。

    展开全文
  • 十进制数转换为二进制数、八进制数、十六进制数方法: 二进制数、八进制数、十六进制数转换为十进制数方法:按权展开求和 与十进制 (1)二进制转十进制 方法:“按权展开求和” 【例】: 规律:...

    进制转换

    十进制数转换为二进制数、八进制数十六进制数的方法:
    二进制数、八进制数十六进制数转换为十进制数的方法:按权展开求和

    与十进制
    (1)二进制转十进制
    方法:“按权展开求和”
    【例】:
    规律:个位上的数字的次数是0,十位上的数字的次数是1,......,依次递增,而十
    分位的数字的次数是-1,百分位上数字的次数是-2,......,依次递减。
    注意:不是任何一个十进制小数都能转换成有限位的二进制数。
    · 十进制整数转二进制数:“除以2取余,逆序排列”(除二取余法
    【例】:
    89÷2 ……1
    44÷2 ……0
    22÷2 ……0
    11÷2 ……1
    5÷2 ……1
    2÷2 ……0
    1
    · 十进制小数转二进制数:“乘以2取整,顺序排列”(乘2取整法)
    【例】: (0.625)10= (0.101)2
    0.625X2=1.25 ……1
    0.25 X2=0.50 ……0
    0.50 X2=1.00 ……1
    十进制1至128的二进制表示:
    0=0
    1=1
    2=10
    3=11
    4=100
    ……
    127=1111111
    128=10000000
    注:在java整数类型中byte的取值为-128~127。

    与八进制
    二进制数转换成八进制数:从小数点开始,整数部分向左、小数部分向右,每3位为一组用一位八进制数的数字表示,不足3位的要用“0”补足3位,就得到一个八进制数。
    八进制数转换成二进制数:把每一个八进制数转换成3位的二进制数,就得到一个二进制数。
    八进制数字与十进制数字对应关系如下:
    000 -> 0 | 004-> 4 | 010=8
    001 -> 1 |005 -> 5| 011=9
    002 -> 2 |006 -> 6 | 012=10
    003 -> 3 |007 -> 7 | 013=11
    【例】:将八进制的37.416转换成二进制数:
    3 7 . 4 1 6
    011 111 .100 001 110
    即:(37.416)8 =(11111.10000111)2
    【例】:将二进制的10110.0011 转换成八进制:
    0 1 0 1 1 0 . 0 0 1 1 0 0
    2 6 . 1 4
    即:(10110.0011)2 = (26.14)8

    与十六进制
    二进制数转换成十六进制数:二进制数转换成十六进制数时,只要从小数点位置开始,向左或向右每四位二进制划分一组(不足四位数可补0),然后写出每一组二进制数所对应的十六进制数码即可。
    十六进制数转换成二进制数:把每一个十六进制数转换成4位的二进制数,就得到一个二进制数。
    十六进制数字与二进制数字的对应关系如下:
    0000 -> 0 0100 -> 4 1000 -> 8 1100 -> C
    0001 -> 1 0101 -> 5 1001 -> 9 1101 -> D
    0010 -> 2 0110 -> 6 1010 -> A 1110 -> E
    0011 -> 3 0111 -> 7 1011 -> B 1111 -> F
    【例】:将十六进制数5DF.9 转换成二进制:
    5 D F . 9
    0101 1101 1111 .1001
    即:(5DF.9)16 =(10111011111.1001)2{十六进制怎么会有小数点}
    【例】:将二进制数1100001.111 转换成十六进制:
    0110 0001 . 1110
    6 1 . E
    即:(1100001.111)2 =(61.E)16

















    运算

    加法

    有四种情况: 0+0=0
    0+1=1
    1+0=1
    1+1=10
    【例】
    1011(2)+11(2) 的和 1110(2)

    乘法
    有四种情况: 0×0=0
    1×0=0
    0×1=0
    1×1=1

    减法
    0-0=0,1-0=1,1-1=0,0-1=1。

    除法
    0÷1=0,1÷1=1。

    拈加法
    拈加法二进制是加减乘除外的一种特殊算法。
    拈加法运算与进行加法类似,但不需要做进位。此算法在博弈论(Game Theory)中被广泛利用
    计算机中的十进制小数转换二进制
    计算机中的十进制小数用二进制通常是用乘二取整法来获得的。
    比如0.65换算成二进制就是:
    0.65 × 2 = 1.3 取1,留下0.3继续乘二取整
    0.3 × 2 = 0.6 取0, 留下0.6继续乘二取整
    0.6 × 2 = 1.2 取1,留下0.2继续乘二取整
    0.2 × 2 = 0.4 取0, 留下0.4继续乘二取整
    0.4 × 2 = 0.8 取0, 留下0.8继续乘二取整
    0.8 × 2 = 1.6 取1, 留下0.6继续乘二取整
    0.6 × 2 = 1.2 取1,留下0.2继续乘二取整
    一直循环,直到达到精度限制才停止(所以,计算机保存的小数一般会有误差,所以在编程中,要想比较两个小数是否相等,只能比较某个精度范围内是否相等。)。这时,十进制的0.65,用二进制就可以表示为:01010011




    展开全文
  • 二进制的运算方法

    千次阅读 2008-04-23 10:17:00
    二进制的运算方法 二进制与其它进制的转换和运算,应该说是计算机类的考试,逢试必考,这里总结一下知识点。二进制运算原理,大家都知道,不外乎,除2取余和乘2取整。这种费时、费力的方法,这里就不说了。考试讲究...
  • 计算机进制转换详解以及Java的二进制的运算方法

    千次阅读 热门讨论 2020-06-01 22:42:59
    本文介绍了计算机进制的基本概念,随后给出了常见进制转换的方法,然后介绍了整数的二进制的计算规则,最后说明了一些二进制计算需要注意的地方(坑)。
  • 在计算机中,原码、反码以及补码是为了区分正数与负数表达与运算设计出来...这里使用是8位的二进制,使用多少位的二进制只是限制取值范围,并没有多大影响 上面8位的二进制因为有一位符号位,因此它
  • 小古银的官方网站(完整教程):http://www.xiaoguyin.com/ ... 目录 目录 ...二进制的乘法和除法 左移运算和右移运算 基础示例 基础讲解 与运算运算 异或运算 取反运算 基础示例 基础讲解 运...
  • 位运算符(对二进制的运算

    千次阅读 2018-10-26 17:41:47
    左移就是乘以2次幂运算,移几位就是几次幂 弊端:只能操作2倍数。 右移 &amp;gt;&amp;gt; 右移就是除于2次幂运算,移几位就是几次幂 右移时,原最高位是什么空位就补什么。 无符号右移 &amp;...
  • 这一讲重点讲清楚2个知识点1、弄清移位运算和乘除运算的关系十进制的运算,我们都很熟悉了,那么二进制的运算机制是怎样的呢?其实,四则运算同样也可以使用在二进制中,要注意每逢2进一位即可。下面我们来学习二...
  • 一 二进制加减乘除前面二进制的加减乘除这部分比较基础,也很直接,我就直接复制粘贴老师的PPT了。二 原码、反码和补码在数字系统中,表示二进制数的方法有三种,原码、反码和补码。二进制数的补码是这样定义的,...
  • 二进制运算

    千次阅读 2014-02-28 18:04:49
      1.原码 反码 和 补码 二进制位元算包括按位与、按位或、...如果其他进制,比如最常见十进制要进行二进制运算,那么先得把十进制数转成二进制数 在了解二进制运算之前,就要先掌握进制转换,那么先来复习一
  • 二进制到十六进制转换法加各种进制的运算
  • 二进制取反运算

    千次阅读 2020-06-27 16:59:27
    1、关于二进制表示 1、正数补码 2、负数补码 3、取反运算 1、关于二进制表示 这里有几个概念,关于原码、补码和反码 补码:在计算机系统中,数值一律用补码来表示(存储) (正数补码是其原码。例如十进制...
  • 二进制反码运算

    万次阅读 2016-10-13 22:13:55
    首先在计算机中所有的数据都是以二进制的形式存储的,正数和负数的区别仅仅是符号位的区别,正数的符号位是0,而负数的符 号位是1,然后正数的反码和补码都和原来一样,而负数的反码是符号位不变,其他按位取反,...
  • 二进制加法运算

    千次阅读 2019-06-20 21:54:54
    两个二进制整数相加时,是位对位处理的,从最低的一对位(右边)开始,依序... 1 与 1 相加的结果是二进制的 10(等于十进制的 2)。多出来的数字向更高位产生一个进位。如下图所示,两个二进制数 0000 0100 和 000...
  • python中的二进制逻辑运算逻辑运算 逻辑运算 python中含有和c++一样&,|,~,^等逻辑运算,可以模拟加减乘除等基础运算。 由于在python中定义变量类型没有固定位长,我们在使用bin()方法打印变量的二进制表示时...
  • 二进制乘法运算

    2020-09-23 14:01:35
    (2) 获取整数n的二进制中最后一个1: n&~(n-1)或者n&(-n)。例如n=010100,则-n=101100,n&(-n)=000100。 (3) 去掉整数n的二进制中最后一个1: n&(n-1)。例如n=010100,n-1=010011,则n&(n-1)=010000...
  • 因为最近在学习过程中...今天就来系统上地学习一下二进制运算的操作。 借鉴和简单转载: http://blog.sina.com.cn/s/blog_87b866180101lb55.html https://blog.csdn.net/qq_30076791/article/details/50571194 ...
  • 同时在看java技术栈相关源码时也会发现有大量的二进制运算,所以写这篇博客目的就是整理出java技术中常用的二进制运算,一方面方便自己查阅和积累,另一方面也想分享给那些刚好看到这篇博文同学,希望能帮助到你...
  • 二进制整数Java实现任意两个二进制数(不论在什么位置)相加,只可能出现4种情况。它们是:0+0=01+0=0+1=11+1=10=0+向高一位进位11+1+1=11=1+向高一位进位1//整数二进制相加public static String add(String b1,...
  • 二进制减法运算

    千次阅读 2019-06-20 21:55:02
    如果采用与十进制减法相同方法,那么从一个较大的二进制数中减去一个较小无符号二进制数就很容易了。示例如下: 01101 (十进制数 13) – 00111 (十进制数 7) ———- 位 0 上减法非常简单: 01101 ...
  • 二进制移位运算

    2016-09-09 16:59:00
    移位运算(shifting operation)是C#中一种特殊的运算,其原理是根据数值存储在计算机内存中以二进制的标准,进行前移或者后移若干位的算法。根据题目来看,无符号位的数字移动“左”、“右”有以下规律:1)左移:将...
  • 它由两个基本字符0,1组成,二进制代码运算规律是逢二进一。 十进制1, 二进制也是1; 十进制2(1+1), 二进制为10; 十进制3(1+1+1), 二进制为11; 十进制4, 二进制为100…… 也就 是说,用二进制做十进制的加法时...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 26,622
精华内容 10,648
关键字:

二进制的运算