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

    2017-11-05 13:24:09
    1.原码 反码 和 补码 二进制位元算包括按位与、按位或、按位异或、取反、左移以及右移这几种运算,运算都使用补码,结算的结果也是补码 ...在了解二进制位运算之前,就要先掌握进制转换,那么先来复习一下

    http://blog.csdn.net/gzu_imis/article/details/20078479

    1.原码 反码 和 补码

    二进制位元算包括按位与、按位或、按位异或、取反、左移以及右移这几种运算,运算都使用补码,结算的结果也是补码

    如果其他进制,比如最常见的十进制要进行二进制位运算,那么先得把十进制数转成二进制数

    在了解二进制位运算之前,就要先掌握进制转换,那么先来复习一下几个概念:原码、反码、补码

    以下我们假设整数均用1个字节表示,1个字节即8个二进制位

     

    1.1 原码

    计算机对数字的二进制表示,原码使用最高位表示符号位:0表示正数,1表示负数,比如

    0  0  0  0       1  0  1  1    表示正数  11

    1  0  0  0       1  0  1  1    表示负数  -11

     

    原码的缺点是:不能直接参与运算

    比如上述 11 + (-11) 结果应该为 0 才对,但是如果我们把二进制直接相加(注意逢2进1)

    1  0  0  1       0 1 1  0    表示负数  -22

    很明显不对,所以为了表示正确的计算,又定义了反码和补码的,参与运算的都是补码

     

    1.2 反码

    把每个二进制位取反,即0变成1,1变成0,但是符号位保持不变(注意:对于正数不生效,原因需自己另查)

    只不过:正数的反码和原码一样,没有任何变化,那么我们来看下 -11 的反码是怎么表示的

    (1)先看 -11 的原码,得到                                          1    0    0    0      1    0     1    1      =====》 -11 的原码

    (2)每个二进制位取反,符号位不变,得到                 1    1    1    1      0    1     0    0      =====》 -11 的反码

     

    1.3 补码

    【反码 + 1】 就得到补码,不过正数的补码和原码也是一样的,没有任何变化,那么我们来看  -11 的补码是如何表示的

    (1)-11 的反码已经计算出来                                   1    1    1    1      0    1     0    0     =====》 -11 的反码

    (2)+1 的操作,注意逢二进一,得到结果是           1    1    1    1      0    1     0    1     =====》 -11 的补码

     

    好了,我们再来看下 11 + (-11) 的操作,注意前面已经说过,都使用补码的计算

    0    0    0    0      1    0     1    1    =====》 正数 11 的补码

    1    1    1    1      0    1     0    1    =====》 负数 -11 的补码

    ===========================================

    0    0    0    0      0    0     0    0    =====》根据逢二进一的相加操作,得到结果就是 0 ,这和我们预期结果相同

     

    之前说过运算使用补码,并且计算结果也是用补码,那么拿到补码之后,怎么还原成十进制数呢?

    对于正数而言,因为反码和补码都是相同的,所以一个补码,比如   0 0 0 0  0  0 1 1 ,很明显:十进制数就是 3

    对于负数而言,【反码 + 1】 = 补码   所以推导出来 【反码】 = 【补码 - 1】,所以上述补码计算的反码结果为

    1 1 1 1  1  1  0  0   ,那么得到反码了,原码就很简单了,直接取反即可,符号位还是保持不变,最终得到

    1 0 0 0  0  0  1  1  , 这样我们很明显看出来,十进制数就是  -3

     

    2.二进制位运算

    已经了解原码、反码和补码的概念了,并且也了解二进制运算使用补码,结果也是补码

    那来看一下二进制位运算的规律

     

    2.1 按位与  &

    1 & 1 结果等于1,其他结果为0,你可以把这个看做boolean类型的 && 运算,只有都为真,结果才为真

     

    2.2 按位或 |

    0 | 0 结果等于0,其他结果为1,你可以把这个看做boolean类型的 || 运算,只有都为假,结果才为假

     

    2.3 按位异或 ^

    0 ^ 0 结果等于0

    1 ^ 1 结果等于0

    0 ^ 1 结果等于1

    1 ^ 0 结果等于1

    因此,相同异或结果为0,相异异或结果为1,你可以把这个看做异性相吸吧。。。

     

    2.4 按位取反

    这个最简单,就是1变0,1变0

    比如 7 的二进制表示是               0  0  0  0    0  1  1  1

    那么 ~7 按位取反之后                1  1  1  1    1   0  0  0

    再次提醒,二进制位运算的结果是补码,不要把上面计算结果搞成原码哦

    所以,反码 = 补码 -1 ,得到      1  1  1  1    0   1  1  1     我想逢二进一你会计算,借位想减你应该会

    所以原码就是反码取反呗,        1  0  0  0    1   0  0  0   这才对到 -7 取反的结果,就是  -8

    没有错,为什么这么巧呢,7取反的结果就是 -8  ,其实 10 取反的结果就是 -11

    那么负数呢,那就反过来,比如 -11 取反的结果就是  10

     

    2.5 按位左移 <<

    往左边移动几位,右边就补几个0,正因为是右边补0,而我们知道符号位在左边,所以右边如果有1移到符号为了,结果就产生负数了

    比如 7 的二进制是                                0  0  0  0    0  1  1  1

    那么 7<<2 表示要左移两位                   0  0  0  1    1  1  0  0    结果是 28

    你发现 7 *4 = 28 了吧,因为左移几位,就是把【原来的数 * 2的位移次指数】

     

    比如在Java里面,   Integer.MAX_VALUE << 1  就是拿最大正数在往左移,就发现结果为  -2 了

     

    2.5 按位右移 >>

    往右边移动几位,左边补符号位( 负数右移高位补1,正数右移高位补0;负数、正数左移低位补0),即正数右移3位,那么左边补3个0,负数右移3位,则左边补3个1


    2.6 不带符号右移 >>>

    不带符号右移,就是左边全补0,不管是正数还是负数

    展开全文
  • 2020年12月14日三个知识点纪录 十进制转二进制位运算 快速幂板子 筛法求素数

    十进制转二进制位运算

    #include<bits/stdc++.h>
    
    using namespace std;
    
    const int N = 20;
    
    int x;
    int b[N];
    
    int main()
    {
    	cin >> x;
    	
    	int j = 0;
    	while(x)
    	{
    		b[j++] = x&1;
    		x>>=1;
    	}
    	
    	for(int i=j-1; i>=0; i--) cout<<b[i];
    	
    	return 0;
     } 
    
    展开全文
  • 进算计二进制位运算

    2016-06-30 09:04:04
    二进制位运算
    二进制位运算
    展开全文
  • JavaScript基础教程二进制位运算JavaScript中的位运算是针对二进制数据提供的运算与操作。在JavaScript标准中规定了二进制位运算时其操作数长度为32位,其最高位为符号位,因此能够表示的有效数字位数为31位。本节...
    d0ea2b147d0d0bdb2c7943f7aa58e668.png

    JavaScript基础教程二进制位运算

    JavaScript中的位运算是针对二进制数据提供的运算与操作。在JavaScript标准中规定了二进制位运算时其操作数长度为32位,其最高位为符号位,因此能够表示的有效数字位数为31位。本节主要介绍JavaScript中的二进制位的运算。


    位运算基本操作符及说明

    与其他程序设计语言类似,JavaScript所提供的二进制位运算主要包括AND(按位与运算)、OR(按位或运算)、XOR(按位异或运算)及左移、右移等相关操作。各类型操作描述如下表所示:

    b66fb16e8db17578ed71a507274c23c5.png

    JavaScript二进制位操作符

    位运算基本操作如描述如上表所示,此处需要注意问题是不要将二进制位运算与逻辑运算的And(与)、OR(或)、NOT(非)概念记混。由于JavaScript使用32位进行数值的二进制计算,因此在进行位操作时首先需要将10进制数值转换为二进制,然后按照二进制位操作要求进行位的操作。与运算、或运算、异或运算较为简单,只需要明确概念即可完成运算,我们将对非运算、左移、右移三个运算进行说明。

    1、非运算

    从定义可知非运算主要通过反转操作数完成计算,程序在具体执行非运算时按照以下步骤执行,以正数9为例对其进行非运算过程进行说明。

    ① 10进制转为32位二进制原码,符号位为0(正数)。如下表所示:

    bab956aaad8c9ee80f616041b81e1b80.png

    原码

    ② 将原码安位进行取反,结果如下:

    7cc8a4619959c8959c353b740350573e.png

    按位取反获取反码

    ③ 此时我们得到是在内存中保存的形式(补码),需要将其转化为原码形式。从符号位可知反码为负数,因此需要按照补码转原码规则除符号位之外取反加1可获取对应原码。

    22cb73514f7f891ee560faae07fc72de.png

    计算结果

    对于二进制非运算我们说明如上所示,因此9的非运算结果为-10,同理可以计算一个负数的非运算结果。作为负数时首先需要将其原码转为内存表示的补码,即除符号位之外其他位取反加一。在进行按位非运算,并将计算结果转换为原码。其过程描述如下图所示。

    a54d724a32a832a79796c946a1a6ad4f.png

    负数的按位与运算

    计算结果可知最高位为1,即正数。正数的补码与原码相同,顾可知最终计算结果为8。即~(-9)=8;

    2、左移、右移问题

    按照位的左移与右移只需要注意按照规则要求左右移动指定位数,左移需要在右侧补充0,以保证位数,右移需要舍弃左侧对应的位数等。举例描述9<<2位操作过程示意如下(为方便演示我们以8位为例进行说明):

    92bec0318cb6130e7ce8164fbe087555.png

    左移操作

    左移操作描述如上图所示,可知9<<2 的结果为36。


    以上给出JavaScript程序设计语言中二进制位操作,并重点对按位取反操作及左移、右移操作进行了说明。本头条号长期关注编程资讯分享;编程课程、素材、代码分享及编程培训。如果您对以上方面有兴趣或代码错误、建议与意见,可以联系作者,共同探讨。更多程序设计相关教程及实例分享,期待大家关注与阅读!系列教程链接如下:

    JavaScript基础教程(三)64位浮点数加法运算

    JavaScript基础教程(二)变量、常量与运算符

    JavaScript基础教程(一)课程说明

    展开全文
  • 二进制位运算
  • JavaScript基础教程二进制位运算JavaScript中的位运算是针对二进制数据提供的运算与操作。在JavaScript标准中规定了二进制位运算时其操作数长度为32位,其最高位为符号位,因此能够表示的有效数字位数为31位。本节...
  • 二进制位运算---左移右移

    千次阅读 2019-11-11 22:03:47
    二进制位运算---左移(<<)右移(>>) (1).二进制中负数的计算 负数以正数的补码表示 原码:一个整数按照绝对值的大小转化成二进制的数 反码:将二进制数按位取反 补码:反码加 1 以-14 举例 原码...
  • 二进制位运算问题 问题描述:计算数n的二进制补码中有多少个1 Java源码: import java.util.Scanner; public class Main { /** * 计算数n的二进制补码中有多少个1  *int类型是32位的(9的补码二进制是3个1,-9...
  • 因为最近在学习的过程中...今天就来系统上地学习一下二进制位运算的操作。 借鉴和简单转载: http://blog.sina.com.cn/s/blog_87b866180101lb55.html https://blog.csdn.net/qq_30076791/article/details/50571194 ...
  • C++ 二进制位运算判断奇数偶数

    千次阅读 2015-03-13 22:20:15
    C++ 二进制位运算判断奇数偶数 //C++ 二进制位运算判断奇数偶数,二进制取位操作,取二进制末位 #include using namespace std; void main() { int i; for(i=0;i;++i) { if(1==(1&i)) cout是奇数"; ...
  • 异或运算符的使用或运算符的使用与运算符搭配取反运算符的使用二进制位运算实战(1)-开发一个进制转换工具​mp.weixin.qq.com上篇文章主要讲了从ArrayBuffer内存中读取数据,也即是从bytes数组中读取每个单元格对应的...
  • 二进制与位运算有关 java常用数据类型与所占字节数 int 4个字节 long 8个字节 byte 1个字节 float 4个字节 char 2个字节 1个字节=8个二进制位 ...二进制位运算在收藏的文章里有。。。。。 R
  • C或Java中的二进制位运算 本题目要求读入2个整数和一个字符,然后根据这个字符值,对两个整数进行相应的二进制位的运算。要求必须使用switch选择结构。 (1)如果字符是&,则两个整数进行二进制位的与运算; (2)...
  • python中 二进制位运算

    千次阅读 2019-06-13 10:15:57
    只要在数字前面加上0b的字符,就可以用二进制来表示十进制数了。 print(0b101) #5 print(0b10001) #17 随后,在python的函数中,有一个bin()函数,直接可以将输入的十进制数,转换成二进制 print(bin(5)) #0b101 ...
  • 二进制位运算 左移与右移

    千次阅读 2019-08-03 20:11:59
    反码:将二进制数按取反 补码:反码加 1 以-14 举例 原码:14 即 00000000 00000000 00000000 00001110 反码: 11111111 11111111 11111111 11110001 补码: 11111111 11111111 1111111...
  • 对于有符号位二进制数,最高表示正负数,最高1表示负数,最高是0则表示正数。如一个8的有符号位二进制数 1000 0001 最高是1则表示一个负数(-1) ,如果1000 0001 是无符号,换算成十进制数是129. 模  ...
  • http://www.iteye.com/topic/556581 二进制 位运算 看这个链接 讲的很细致 http://www.cnblogs.com/ASPNET2008/archive/2009/04/29/1446471.html 负数
  • 二进制位运算小结

    2018-11-17 15:21:35
    如果想将一个单元清零,即使其全部二进制位为0,只要与一个各位都为0的数值做与运算,结果为0. 例如X=10101001 X&amp;00000000=00000000 取一个数中指定位 例如:设X为10101110,取X的低4位 X&amp;...
  • 二进制位运算应用

    2017-09-18 22:06:42
    位运算应用
  • 二进制位运算和状态存储

    千次阅读 2018-05-25 08:15:46
    在系统设计中只要是状态只有两种状态(0,1)的都可以用二进制位来表示,如果有多个状态用多个位或者还是新加字段吧。(1)可以节省字段。一个字段只需要一个数字 就可以标识很多种设置和信息。(2)可以处理位置...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 19,392
精华内容 7,756
关键字:

二进制位运算