精华内容
下载资源
问答
  • 判断一个二进制数字多少1----java实现
    2021-03-10 10:24:51

    这个题目会有多个解法:

    需要判断n的二进制有几个1

    first:通过n向右移位&1,如果n的最后为1,那么与1结果为1,(相信大家都会与运算,hashmap就是用与运算)以此来实现,循环判断有多少个1,结束条件为n=0;

    second:上述方法有一个缺陷,就是当n为有符号数字时,才用n==0的结束条件会发生死循环,那么我们可以通过移位1来实现,也就是有每次比较去把1向左移,一次来比较

    前两种属于常规做法,下面来说一种技巧性的做法

    比如:n=1001,每次将n-1,那么第一次就是1000,使用n&(n-1)→1001&1000=1000,这是第一次计算,第二次1000&0111=0

    两次运算,而1001中有两个1;   如果看不懂的可以自己写写,感受下,就能体会了;

    上代码:

    public void showOne(int n){

    if(n==0){

    System.out.println("0");

    return;

    }

    int count=0;

    while(n!=0){

    count++;

    n=n&(n-1);

    }

    System.out.println(count);

    }

    出处来自剑指offer

    更多相关内容
  • 您可能感兴趣的文章:C++ 十进制转换为二进制的实例代码C++实现string存取二进制数据的方法C++实现读入二进制数并转换为十进制输出详解C++编程中对二进制文件的读写操作C++二进制翻转实例分析C++中种将整数
  • 我就突然对二进制的输出感兴趣了。想知道怎样输出二进制。我们知道C++输出十六进制是cout〈〈hex〈〈 a;而八进制是cout〈〈 ocx〈〈 a;二进制则没有默认的输出格式,需要自己写函数进行转换,于是上网搜索了一下。...
  • 二进制运算符

    2021-07-29 01:09:56
    概述作用速度块都作用于32位整数二进制位运算符用于直接对二进制位进行计算,一共7二进制或运算符(or):符号为|,表示若两个二进制位都为0,则结果为0,否则为1。二进制与运算符(and):符号为&,表示若两...

    概述

    作用速度块

    都作用于32位整数

    二进制位运算符用于直接对二进制位进行计算,一共有7个。

    二进制或运算符(or):符号为|,表示若两个二进制位都为0,则结果为0,否则为1。

    二进制与运算符(and):符号为&,表示若两个二进制位都为1,则结果为1,否则为0。

    二进制否运算符(not):符号为~,表示对一个二进制位取反。

    异或运算符(xor):符号为^,表示若两个二进制位不相同,则结果为1,否则为0。

    左移运算符(left shift):符号为<

    右移运算符(right shift):符号为>>,详见下文解释。

    头部补零的右移运算符(zero filled right shift):符号为>>>

    做位运算的时候,是以32位带符号的整数进行运算的,并且返回值也是一个32位带符号的整数

    利用这个特性,可以写出一个函数,将任意数值转为32位整数。

    function toInt32(x) {

    return x | 0;

    }

    toInt32(1.001) // 1

    toInt32(1.999) // 1

    toInt32(1) // 1

    toInt32(-1) // -1

    toInt32(Math.pow(2, 32) + 1) // 1

    toInt32(Math.pow(2, 32) - 1) // -1

    二进制或运算符

    两个二进制位之中只要有一个为1,就返回1,否则返回0。

    0 | 3 // 3

    二进制与运算符

    两个二进制位之中只要有一个位为0,就返回0,否则返回1。

    0 & 3 // 0

    二进制否运算符

    二进制否运算符(~)将每个二进制位都变为相反值(0变为1,1变为0

    简单记忆成减去-1

    对一个小数连续进行两次二进制否运算,能达到取整效果。

    ~~2.9 // 2

    ~~47.11 // 47

    ~~1.9999 // 1

    ~~3 // 3

    使用二进制否运算取整,是所有取整方法中最快的一种。

    对字符串进行二进制否运算,JavaScript 引擎会先调用Number函数,将字符串转为数值。

    // 相当于~Number('011')

    ~'011' // -12

    // 相当于~Number('42 cats')

    ~'42 cats' // -1

    // 相当于~Number('0xcafebabe')

    ~'0xcafebabe' // 889275713

    // 相当于~Number('deadbeef')

    ~'deadbeef' // -1

    // 相当于 ~Number([])

    ~[] // -1

    // 相当于 ~Number(NaN)

    ~NaN // -1

    // 相当于 ~Number(null)

    ~null // -1

    异或运算符

    异或运算(^)在两个二进制位不同时返回1,相同时返回0。

    相当于加 与相当于乘以

    用“异或运算”可以在不引入临时变量的前提下,互换两个变量的值。

    var a = 10;

    var b = 99;

    a ^= b, b ^= a, a ^= b;

    a // 99

    b // 10

    这是互换两个变量的值的最快方法。

    异或运算也可以用来取整。

    12.9 ^ 0 // 12

    左移运算符

    左移运算符(<

    // 相当于乘以2的1次方

    4 << 1

    // 8

    -4 << 1

    // -8

    如果左移0位,就相当于将该数值转为32位整数,等同于取整,对于正数和负数都有效。

    13.5 << 0

    // 13

    -13.5 << 0

    // -13

    右移运算符

    右移运算符(>>)表示将一个数的二进制值向右移动指定的位数。如果是正数,头部全部补0;如果是负数,头部全部补1。右移运算符基本上相当于除以2的指定次方(最高位即符号位参与移动)

    右移运算可以模拟 2 的整除运算。

    5 >> 1

    // 2

    // 相当于 5 / 2 = 2

    21 >> 2

    // 5

    // 相当于 21 / 4 = 5

    21 >> 3

    // 2

    // 相当于 21 / 8 = 2

    21 >> 4

    // 1

    // 相当于 21 / 16 = 1

    头部补零的右移运算符

    该运算的结果与右移运算符(>>)完全一致,区别主要在于负数

    查看一个负整数在计算机内部的储存形式,最快的方法就是使用这个运算符。

    4 >>> 1

    // 2

    -4 >>> 1

    // 2147483646

    -1 >>> 0 // 4294967295

    上面代码表示,-1作为32位整数时,内部的储存形式使用无符号整数格式解读,值为 4294967295(即(2^32)-1,等于11111111111111111111111111111111)。

    开关作用

    位运算符可以用作设置对象属性的开关

    假定某个对象有四个开关,每个开关都是一个变量。那么,可以设置一个四位的二进制数,它的每个位对应一个开关。

    var FLAG_A = 1; // 0001

    var FLAG_B = 2; // 0010

    var FLAG_C = 4; // 0100

    var FLAG_D = 8; // 1000

    9.1然后,就可以用二进制与运算检验,当前设置是否打开了指定开关。

    var flags = 5; // 二进制的0101

    if (flags & FLAG_C) {

    // ...

    }

    // 0101 & 0100 => 0100 => true

    上面代码检验是否打开了开关C。如果打开,会返回true,否则返回false。

    9.2

    现在假设需要打开A、B、D三个开关,我们可以构造一个掩码变量。

    var mask = FLAG_A | FLAG_B | FLAG_D;

    // 0001 | 0010 | 1000 => 1011

    上面代码对A、B、D三个变量进行二进制或运算,得到掩码值为二进制的1011。

    有了掩码,二进制或运算可以确保打开指定的开关。

    flags = flags | mask;

    二进制与运算可以将当前设置中凡是与开关设置不一样的项,全部关闭。

    flags = flags & mask;

    异或运算可以切换(toggle)当前设置,即第一次执行可以得到当前设置的相反值,再执行一次又得到原来的值。

    flags = flags ^ mask;

    二进制否运算可以翻转当前设置,即原设置为0,运算后变为1;原设置为1,运算后变为0。

    flags = ~flags;

    展开全文
  • 二进制符号解释

    千次阅读 2019-09-28 16:49:17
    一:二进制运算符 &:且:都为1才为真 例:A&B A=12 B=3 A&B=1100&0011=0000 |:或:为1就为真 例:A|B A=12 B=3 A|B=1100|0011=1111 ^:异或:一为0另一为1---两不相同为真 例:...

    一:二进制运算符

    &:且:都为1才为真

    例:A&B    A=12    B=3

    A&B=1100&0011=0000

    |:或:有一个为1就为真

    例:A|B    A=12    B=3

    A|B=1100|0011=1111

    ^:异或:一个为0另一个为1---两个不相同为真

    例:A^B    A=12    B=3

    A^B=1100^0011=1111

    ~:取反   将0转化为1,将1转化为0

    例:~A   A=12

    ~A=0011

    二:二进制运算符的应用

    1)n&(n-1)

    (1)可以知道n转化为二进制有几个1---求某一个数的二进制表示中1的个数

    while(n>0){
        count++;
        n=n&(n-1);
    }

    (2)判断一个数是否是2的方幂

    if(n>0&&((n&(n-1))==0))
    cout<<"该数是2的方幂"<<endl;

    (2)计算N!的质因数2的个数

    容易得出N!质因数2的个数 = [N / 2] + [N / 4] + [N / 8] + …
    下面通过一个简单的例子来推导一下过程:N = 10101(二进制表示)
    现在我们跟踪最高位的1,不考虑其他位假定为0,
    则在
    [N / 2] 01000
    [N / 4] 00100
    [N / 8] 00010
    [N / 8] 00001
    则所有相加等于01111 = 10000 - 1
    由此推及其他位可得:(10101)!的质因数2的个数为10000 - 1 + 00100 - 1 + 00001 - 1 = 10101 - 3(二进制表示中1的个数)

    推及一般N!的质因数2的个数为N (N二进制表示中1的个数)

     

    2)n&(-n)

    在树状数组中lowbit出现 用来求 t 中的因子中形如2^k的数为多少 用来取得n最右边的1,可以知道其因子中有几个2

    10: 0000 1010

    -10: 1111 0110

    10&(-10)为 0010 = 2 所以10的因子中为2的有一个,2^k的形式的为 2^1

    8&(-8) = [1000] = 8 所以8的因子中为2的有3个,2^k的形式为2^3

     

    转载于:https://www.cnblogs.com/Aiahtwo/p/11407440.html

    展开全文
  • 二进制补码计算——有符号数的乘法

    千次阅读 多人点赞 2020-11-25 11:15:12
    位数问题 a_width位的a,乘以B_width位的b,结果的位数是A_width + B_width。 定点小数问题 小数位数等于a的小数位数,加上b的小数位数之和。 补码相乘问题 补码 * 补码 = 补码 ...有符号数 * 有符号数 前三

    位数问题

    a_width位的a,乘以B_width位的b,结果的位数是A_width + B_width。

    定点小数问题

    小数位数等于a的小数位数,加上b的小数位数之和。

    补码相乘问题

    • 补码 * 补码 = 补码
    • 符号问题
      1、无符号数 * 无符号数 = 无符号数
      2、无符号数 * 有符号数 = 有符号数
      3、有符号数 * 无符号数 = 有符号数
      4、有符号数 * 有符号数 = 有符号数

    无符号数 * 无符号数

    在这里插入图片描述
    另一个例子:
    8*9

    无符号数 * 有符号数

    在这里插入图片描述
    第四个加数——a先补最高位(0 0001),再连同最高位取反(1 1110)加一(1 1111),最后乘以b的符号位
    结果的最高位是符号位

    有符号数 * 无符号数

    在这里插入图片描述
    每个加数——都要补符号位
    结果的最高位是符号位

    有符号数 * 有符号数

    在这里插入图片描述
    前三个加数——都要补符号位
    第四个加数——a先补符号位(1 1001),再连同符号位取反(0 0110)加一(0 0111),最后乘以b的符号位。
    结果的最高位是符号位

    参考资料:https://www.allaboutcircuits.com/technical-articles/multiplication-examples-using-the-fixed-point-representation/

    展开全文
  • 符号二进制数转换十进制数(python实现) 算法参考站内一老哥,自己加了句,加了判断符号功能和一些注释 以下链接: 二进制转换十进制 sum = 0 str1 = input('请输入一个二进制数:') lenth = len(str1) #...
  • 2)二进制的简写形式二、进制运算1)八进制运算表(1) 加法运算表(2)乘法运算表(3)八进制简单运算题三、数据宽度1)什么是数据宽度2)计算机中常用的基本数据宽度四、无符号有符号数进制进制也就是进位计数制,是人为...
  • 有符号二进制数的乘法

    万次阅读 多人点赞 2017-01-07 12:19:07
    其中两负数的例子:3位二进制乘法结果一般需要6为二进制表达 带符号数 x=101=-3 和y=011=3相乘 结果为110111=-9  如果直接算出来十进制是-9然后转换为6为二进制我也能理解,但是我很好奇他利用了什么规则得出...
  • 一个字节由几个二进制位组成

    千次阅读 2021-07-03 05:36:14
    聊到几个,我们许多人都了解,人问一个字节由几多个二进制位组成,还有朋友想问一个字节由几个二进制位构成,这到底怎么回事呢?事实上在计算机中一个字节由几个二进制位构成呢,小编为各人带来一个字节由几个二...
  • Java位运算符及二进制常识

    千次阅读 2021-03-18 00:21:45
    一、位运算 二、位移运算 三、二进制数以Java中最常...递增:二进制数右端每次加1(逢2进1),一直到31符号位的0全部变为1,得到最大的正整数2147483647。⑵ -1是最大的负整数,符号位为1,其它31位也全部为1。递...
  • 这是16进制字符串转无符号8位整数后再转成有符号的8位整数的过程, 之所以这么转是因为直接ParseInt(s, 16, 8)会抛出异常, 因为默认的strconv的ParseInt貌似不支持负数和浮点数的解析, 所以先将其转成uint64, ...
  • 首先看几个例子: 假设计算机字长为8位 1的原码(8位):0000_0001 反码、补码跟原码一样。 -1的原码(8位):1000_0001 反码 :1111_1110 补码 :1111_1111 0+0和-0之分 +0的原码(8位):0000_0000 反码、补码同...
  • 摘 要文章解决的问题是C语言中种不同数制的数值型无符号整型数据,转换成二进制数的方法。【关键词】C语言 无符号整型数据 二进制数 十进制数 其它进制数对于C语言中的数值型数据,通常可以方便地表示成多种不同...
  • Verilog实现二进制有符号定点数的乘法运算

    千次阅读 多人点赞 2020-08-12 15:44:33
    Verilog实现有符号数乘法运算二进制运算原理1、无符号二进制数(signed)运算 二进制运算原理 总结最近FPGA的学习,使我明白了一件事:在Verilog程序的编写中,“位”(bit)这一概念,对于程序编写至关重要,...
  • 二进制中的符号位的区分以及表示

    千次阅读 2018-05-23 13:27:00
    8位二进制2^8=256状态.如果用来表示无符号数,就可以表示0~255恰好256个二进制数;而如果表示带符号数,则最高位就是符号位,0表示"+",1表示"-",剩下的7位用来表示绝对(采用补码形式).0用"+0"表示,正数为+1~+...
  • 32位的整数的二进制数表示多少1?
  • 同学们初学二进制几个常见疑问

    千次阅读 2021-06-14 11:03:47
    、使用步骤 1.引入库 2.读入数据 总结 前言 提示:这里可以添加本文要记录的大概内容: 例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器...
  • 1111 1111 1111 1111 + 1 = 1 0000 0000 0000 0000 1 0000 0000 0000 0000 = 2^16 所以1111 1111 1111 1111 + 1 = 2^16 所以1111 1111 1111 1111 =( 2^16 - 1) 0~( 2^16 - 1)为无符号数的取值范围
  • 二进制ASCII码

    千次阅读 2021-07-25 08:24:43
    本词条缺少概述图,补充相关内容使词条更...依次类推,7位二进制数可以表示(2=)128种状态,每种状态都唯一地编为一7位的二进制码,对应一字符(或控制码),这些码可以排列成一十进制序号0~127。所以,7位ASCII...
  • 然后在结构体描述部分对电路模块的功能进行描述,指明整个电路时如何运作的:对3个二进制的9位矢量数进行加法运算输出到data。 使用两四位二进制加法器组成。 功能设计 实现八位二进制数加法,并保存可能存在的...
  • 原标题:说说二进制与计算机的那些事儿二进制与计算机事物的多少或者顺序,我们可以用一种称为...现在国际通用的主要进位制十进制、二进制、二十进制和六十进制。其中的二进制是计算机通用的进位制。·八卦:最...
  • 2010-12-19短整形如果是2字节,就是16位,在有符号的情况下,正数最高是0111 1111 1111 1111,负数是1111 1111 1111 ...在加上符号位就成了17位了,这数值范围究竟是怎么分配的有符号二进制数的表示是这样的:如果...
  • 满意答案fyf68912352014.12.18采纳率:59%等级:10已帮助:5468人计算机中的所有信息都是以二进制方式表示的,这两个二进制数是0和1。电脑中存储的数字为采用二进制二进制是逢二进一,所有的数都用两数字0或1来...
  • iOS 二进制文件分析之常用命令 一、背景介绍 最近新版本审核时被拒了,Apple给出的原因是使用到了Intents的功能,但是Info.plist中并未给出使用简介导致被拒。由于我们的App并不需要使用Intents等能力,所以...
  • 二进制如何转换为十进制?

    千次阅读 2021-06-19 05:54:00
    二进制到十进制数字转换使用加权列来标识数字的顺序以确定数字的最终值将二进制转换为十进制(base-2到base-10) )数字和背面是一重要的概念,因为二进制编号系统构成了所有计算机和数字系统的基础。十进制或...
  • 二进制(binary)是在数学和数字电路中指以2为基数的记数系统,是以2为基数代表系统的二进位制。这一系统中,通常用两不同的符号0(代表零)和1(代表一)来表示[1]。数字电子电路中,逻辑门的实现直接应用了...
  • 二进制编码数字

    千次阅读 2021-07-31 05:31:49
    同义词计算机编码一般指二进制编码数字二进制编码数字[1],即计算机编码,指电脑内部代表字母或数字的方式。中文名二进制编码数字外文名Computer number ...在位元的情况下可以得到四不同的状态:00011011...
  • 二进制与计算机

    2021-07-22 05:04:44
    二进制与计算机事物的多少或者顺序,我们可以用一种称为...现在国际通用的主要进位制十进制、二进制、二十进制和六十进制。其中的二进制是计算机通用的进位制。八卦:最早提出的二进制思想中国古人很早就开始使...
  • 摘要:二进制分析技术通常被用来对应用进行安全审计、漏洞检测等,通过分析学术界近20年发表的上百篇学术论文来分析二进制代码相似度比较都采用了哪些具体技术,二进制代码相似度比较的技术挑战是什么,后续的研究...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 242,006
精华内容 96,802
关键字:

二进制有几个符号