精华内容
下载资源
问答
  • 二进制个数位的权是
    千次阅读
    2021-07-21 02:05:34

    中计数采用了多种记数制,比如:十进制,六十进制(六十秒为一分,六十分为一小时,即基数为60,运算规则是逢六十进一),…….在计算机中常用到十进制数、二进制数、八进制数、十六进制数等,下面就这几种在计算机中常用的数制来介绍一下.

    1.十进制数

    我们平时数数采用的是十进制数,这种数据是由十个不同的数字0、1、2、3、4、5、6、7、8、9任意组合构成,其特点是逢十进一.

    任何一个十进制数均可拆分成由各位数字与其对应的权的乘积的总和.例如:

    ?

    ?

    ?

    这里的10为基数,各位数对应的权是以10为基数的整数次幂.为了和其它的数制区别开来,我们在十进制数的外面加括号,且在其右下方加注10.

    2.二进制数

    在计算机中,由于其物理特性(只有两种状态:有电、无电)的原因,所以在计算机的物理设备中获取、存储、传递、加工信息时只能采用二进制数.二进制数是由两个数字0、1任意组合构成的,其特点是逢二进一.例如:1001,这里不读一千零一,而是读作:一零零一或幺零零幺.为了与其它的数制的数区别开来,我们在二进制数的外面加括号,且在其右下方加注2,或者在其后标B.

    任何一个二进制数亦可拆分成由各位数字与其对应的权的乘积的总和.其整数部分的权由低向高依次是:1、2、4、8、16、32、64、128、……,其小数部分的权由高向低依次是:0.5、0.25、0.125、0.0625、…….

    二进制数也有其运算规则:

    加法:0+0=0?0+1=1?1+0=1?1+1=10

    乘法:0×0=0?0×1=0?1×0=0?1×1=1

    二进制数与十进制数如何转换:

    (1) 二进制数—→十进制数

    对于较小的二进制数:

    对于较大的二进制数:

    方法1:各位上的数乘权求和?例如:

    (101101)2=1×25+0×24+1×23+1×22+0×21+1×20=45

    (1100.1101)2=1×23+1×22+0×21+0×20+1×2-1+1×2-2+0×2-3+1×2-4=12.8125

    方法2:任何一个二进制数可转化成若干个100…0?的数相加的总和?例如:

    (101101)2=(100000)2+(1000)2+(100)2+(1)2

    而这种100…00形式的二进制数与十进制数有如下关联:1后有n个0,则这个二进数所对应的十进制数为2n.

    所以:(101101)2=(100000)2+(1000)2+(100)2+(1)2=25+23+22+20=45

    (2)十进制数—→二进制数

    整数部分:整除以2取余法.例如:75

    75/2=37…1?37/2=18…1?18/2=9…0?9/2=4…1?4/2=2…0?2/2=1…0?1/2=0…1

    将得到的一系列的余数倒过来书写就得到该数所对应的二进制数(1001011)2

    小数部分:乘以2取整法.例如:0.7

    0.7×2=1.4…1?0.4×2=0.8…0?0.8×2=1.6…1?0.6×2=1.2…1?0.2×2=0.4…0

    3.八进制数

    八进制数是由0、1、2、3、4、5、6、7、8任意组合构成的,其特点是逢八进一.为了与其它的数制的数区别开来,我们在八进制数的外面加括号,且在其右下方加注8,或者在其后标Q.

    八进制数的基数是8,任何一个八进制数亦可拆分成由各位数字与其对应的权的乘积的总和.其整数部分的权由低向高依次是:1、8、82、83、84、85、……,其小数部分的权由高向低依次是:8-1、8-2、8-3、8-4、…….

    八进制数与其它数制的转换:

    (1)与十进制数的互换

    八进制数—→十进制数

    十进制数—→八进制数

    方法均与二进制数与十进制数互换的方法一样.

    (2)与二进制数的互换

    八进制数—→二进制数

    把八进制数的每一位改成等值的三位二进制数,即“一位变三位”.

    例如:56.103Q

    ?5?6?.?1?0?3

    ? ↓?↓?↓?↓?↓?

    ? 101?110?001?000?011

    所以(56.103)8=(101110.001000011)2

    二进制数—→八进制数

    把二进制数从小数点开始向两边每三位为一段(不足补0),每段改成等值的一位八进制数即可,即“三位变一位”.

    4.十六进制数

    十六进制数是由0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F任意组合构成的,其特点是逢十六进一.为了与其它的数制的数区别开来,我们在十六进制数的外面加括号,且在其右下方加注16,或者在其后标H.

    十六进制数的基数是16,任何一个十六进制数亦可拆分成由各位数字与其对应的权的乘积的总和.其整数部分的权由低向高依次是:1、16、162、163、164、165、……,其小数部分的权由高向低依次是:16-1、16-2、16-3、16-4、…….

    十六进制数与其它数制的转换:

    (1)与十进制数的互换

    十六进制数—→十进制数

    十进制数—→十六进制数

    方法均与二进制数与十进制数互换的方法一样.

    (2)与二进制数的互换

    十六进制数—→二进制数

    把十六进制数的每一位改成等值的四位二进制数,即“一位变四位”.

    例如:(3AD.B8)16

    ?3?A?D.?B?8

    ? ↓?↓?↓?↓?↓?

    ? 0011?1010?1101?1011?1000

    所以(3AD.B8)16=(1110101101.10111)2

    二进制数—→十六进制数

    把二进制数从小数点开始向两边每四位为一段(不足补0),每段改成等值的一位十六进制数即可,即“四位变一位”.

    下表中列出了一些数的二、八、十和十六进制形式

    二进制数 八进制数 十进制数 十六进制数 二进制数 八进制数 十进制数 十六进制数

    0000 0 0 0 1001 11 9 9

    0001 1 1 1 1010 12 10 A

    0010 2 2 2 1011 13 11 B

    0011 3 3 3 1100 14 12 C

    0100 4 4 4 1101 15 13 D

    0101 5 5 5 1110 16 14 E

    0110 6 6 6 1111 17 15 F

    0111 7 7 7 10000 20 16 10

    1000 10 8 8 10001 21 17 11

    ? 二、计算机中数的表示

    在计算机中所有的数据、指令以及一些符号等都是用特定的二进制代码表示的.

    ? 1.数值数据的表示

    我们把一个数在计算机内被表示的二进制形式称为机器数,该数称为这个机器数的真值.机器数有固定的位数,具体是多少位受到所用计算机的限制.机器数把其真值的符号数字化,通常是用规定的符号位(一般是最高位)取0或1来分别表示其值的正或负.例如:假设机器数为8位,则其最高位是符号位,那么在整数的表示情况下,对于00101110和10010011,其真值分别为十进制数+46和-19.

    机器数常采用原码和补码的形式作为其编码方式.

    (1)原码

    整数X的原码是指:其符号位的0或1表示X的正或负,其数值部分就是X的绝对值的二进制表示.通常用[X]原表示X的原码.

    例如:假设机器数的位数是8,那么:[+17]原=00010001?[-39]原=10100111

    注意:由于[+0]原=00000000,[-0]原=10000000,所以数0的原码不唯一,有“正零”和“负零”之分.

    (2)反码

    在反码的表示中,正数的表示方法与原码相同;负数的反码是把其原码除符号位以外的各位取反(即0变1,1变0).通常,用[X]反表示X的反码.

    例如:[+45]反=[+45]原=00101101?[-32]原=10100000?[-32]反=11011111

    (3)补码

    在补码的表示中,正数的表示方法与原码相同;负数的补码在在其反码的最低有效位上加1.通常用[X]补表示X的补码.

    例如:[+14]补=10100100?[-36]反=11011011?[-36]补=11011100

    注意1:数0的补码的表示是唯一的,即[0]补=[+0]补=[-0]补=00000000

    注意2:利用公式?[X]补+[±Y]补=[X±Y]补?可以把加法和减法统一成加法.(符号位和其它位上数一样运算,如果符号位上有进位,则把这个进位的1舍去不要,即不考虑“溢出”问题).

    例如:?X=6,Y=2?求X-Y

    ?[X]补=00000110?[-Y]补=11111110

    ? [X-Y]补=00000100

    另:机器数中采用定点或浮点数的方式来表示小数!(略)

    ? 2.ASCII码

    计算机除了能处理数值外还能处理字符(指字母A、B、…、Z、a、b、…、z,数字0、1、…、9,其它一些可打印显示的符号如:+、-、*、/、、…).在计算机内部,这些符号也得用二进制代码来表示,目前,在国际上广泛采用的是美国标准信息交换代码(American?Standard?Code?for?Information?Interechang),简称ASCII码.

    标准的ASCII码中共有128(27)个字符,所以标准的ASCII码采用7位二进制编码.因为其中的字符排列是有序的,其对应的ASCII码也是相连的,所以我们只需要记几个关键字符的ASCII码,其它可以推算.

    ‘0’——48?‘A’——65?‘a’——97

    注:标准的ASCII码能表示的字符较少,于是在其基础上又设计了一种扩

    解析看不懂?求助智能家教解答查看解答

    更多相关内容
  • 一、二进制数转换成十进制数 ...再用2去除商,又会得到一商和余数,如此进行,直到商为零时为止,然后把先得到的余数作为二进制数的低位有效,后得到的余数作为二进制数的高位有效,依次排列
  • 快速理解二进制计数的基数和位权

    千次阅读 2020-01-08 08:52:20
    伸出你的右手,从小指开始,给每手指指定一个位权位权依次是1、2...00111这神秘的数字就是二进制计数,称它为二进制数是因为它只有0和1两数字,用数学语言来说就是基数为2。依次类推,基数为3的是三进制计数...

    在了解二进制之前,首先了解一下什么是次幂(mi)?

    次幂是云南少数民族计算布帛的单位 。"幂“指乘方运算的结果。n^m指将n自乘m次,也叫做n的m次幂。

    好了,了解了什么是次幂后,现在请伸出你的右手,从小指开始,给每个手指指定一个位权,位权依次是1、2、4、8、16。手指有伸直和弯曲两个状态,把伸直状态用数字1表示,弯曲状态用数字0表示。现在将右手的五个手指全部伸直,然后将拇指和食指弯曲,从拇指开始依次记录下每个手指的状态:00111。


    00111这个神秘的数字就是二进制计数,称它为二进制数是因为它只有0和1两个数字,用数学语言来说就是基数为2。依次类推,基数为3的是三进制计数、……、基数为10的就是十进制计数,十进制计数有10个数字,分别是0、1、2、3、4、5、6、7、8、9。

    认识了二进制计数,接下来再说说位权。可以借助于十进制计数来理解位权,在十进制计数中,计数单位分别为个位、十位、百位、千位、万位、十万位……,其中个位数表示数值1、十位数表示数值10、百位数表示数值100、千位数表示数值1000、……,每个位数表示的数值叫位权。位权通过计算基数的n-1次幂就可以得到,这里的n是指位数所在数字中的位置,例如,对十进制数1260来说,个位数是1260的第一个数字,因此n为1;十位数是第二个数字,因此n为2;百位数是第三个数字,因此n为3;千位数是第四个数字,因此n为4。由此,个位数的位权为10的1-1次幂是1,十位数的位权为10的2-1次幂是10、百位数的位权为10的3-1次幂是100、千位数的位权为10的4-1次幂是1000。

    理解了十进制的位权,再来理解二进制的位权就很容易了。前面二进制数00111从低位到高位的位权依次是2的0次幂1、2的1次幂2、2的2次幂4、2的3次幂8、2的4次幂16,这也是前面从小指开始到拇指指定的位权。

    理解了二进制计数的基数和位权,就可以进行数制转换了。00111如何转换成十进制计数呢?转换很简单,将二进制数从高位到低位每个数字乘以相应的位权然后求和就可以了。

    00111(二进制)= 0 * 16 + 0 * 8 + 1 * 4 + 1 * 2 + 1 * 1 = 7(十进制)

    十进制数到二进制数的转换可以采用“除2取余,逆排序”法,具体转换过程是,用2去除一个十进制数,得到商和余数,然后再用2去除商,又会得到商和余数,循环往复直至商为0为止。转换过程如下图所示。

    文章来源:米粒教育

    展开全文
  • 各种进制数位权展开

    万次阅读 2020-10-11 10:01:11
    一、十进制数位权展开 1、十进制数位权展开的具体实例 (456.75)10=400+50+6+0.7+0.05=4×102+5×101+6×100+7×10−1+5×10−2(456.75)_{10} = 400 + 50 + 6 + 0.7 + 0.05 = 4 × 10^2 + 5 × 10^1 + 6 × 10^0...

    一、十进制数按位权展开

    在这里插入图片描述

    1、十进制数按位权展开的具体实例

    ( 456.75 ) 10 = 400 + 50 + 6 + 0.7 + 0.05 = 4 × 1 0 2 + 5 × 1

    展开全文
  • 二进制基础及运算

    千次阅读 2019-12-04 16:06:09
    二进制计算 每一上的基数的索引次幂相加之和 例如:0101=12º+12²=5 第一1基数2的索引0次幂+第三1*基数2的2次幂等于5 其他进制计算等同 十进制转2进制:除2求余法 除2求余倒序表示 简便算法:记住2的10次...

    一、什么是二进制

    二进制是计算机运算时所采用的数制,基数是2,也就是说它只有两个数字符号,即0和1。如果在给定的数中,除0和1外还有其他数(例如1061),那它就绝不会是一个二进制数了。二进制数的最大数码也是基数减1,即2-1=1,最小数码也是0。二进制数的标志为B,如(1001010)B,也可用下标“2”来表示,如(1001010)2(注意是下标)。

    二、二进制转换为十进制

    二进制转换成十进制的方法,大家可能早就有所了解了,如在IPv4地址计算时就经常进行这样的操作。转换的方法比较简单,只需按它的权值展开即可。展开的方式是把二进制数首先写成加权系数展格式,然后按十进制加法规则求和。这种方法称为“按权相加”法。

    二进制整数部分的一般表现形式为:bn-1…b1b0(共n位),按权相加展开后的格式为(注意,展开式中从左往右各项的幂次是从高到低下降的,最高位的幂为n-1,最低的幂为0):

    bn-1×2n-1+bn-2×2n-2…+b1×21+b0×20

    如二进制数(11010)2的按权相加展开格式为:

    在这里插入图片描述
    用一句话概括来说就是:二进制数*基数的索引次幂相加之和

    二进制小数部分的幂次是反序排列的(也就是与整数部分的幂次序列相反,从左往右其绝对值是从低到高上升的),且为负值,最高位幂次(也就是最靠近小数点的第一个小数位的幂次)为“-1”。如二进制小数部分的格式为:0.bn-1…b1b0,则按权相加后的展开格式为:

    bn-1×2-1+bn-1×2-2…+b1×2-(n-1)+b0×2-n

    如(0.1011)2的按权相加展开格式为:

    1×2-1+0×2-2+1×2-3+1×2-4=0.5+0+0.125+0.0625=(0.6875)10

    三、十进制转二进制

    十进制整数转换为二进制的方法是:采用“除2逆序取余”法(采用短除法进行)。也就是先将十进制数除以2,得到一个商数(也是下一步的被除数)和余数;然后再将商数除以2,又得到一个商数和余数;以此类推,直到商数为小于2的数为止。然后从最后一步得到的小于2的商数开始将其他各步所得的余数(也都是小于2的0或1)排列起来(俗称“逆序排列”)就得到了对应的二进制数。

    在这里插入图片描述
    图 1-1 十进制整数48转换成二进制整数的步骤
    在这里插入图片描述
    图 1-2 十进制整数250转换成二进制整数的步骤

    简便算法:记住2的10次幂1024内的次幂值,比如计算114的二进制
    在这里插入图片描述

    四、二进制逻辑运算

    在计算机中所有数据都是以二进制的形式储存的。位运算其实就是直接对在内存中的二进制数据进行操作,因此处理数据的速度非常快。
    在实际编程中,如果能巧妙运用位操作,完全可以达到四两拨千斤的效果,正因为位操作的这些优点,所以位操作在各大IT公司的笔试面试中一直是个热点问题。因此本文将对位操作进行如下方面总结:

    • 位操作基础,用一张表描述位操作符的应用规则并详细解释。
    • 常用位操作小技巧,判断奇偶、交换两数、变换符号、求绝对值。
    • 位操作与空间压缩,针对筛素数进行空间压缩。

    1、位操作基础

    基本的位操作符有与、或、异或、取反、左移、右移、无符号右移这7种,它们的运算规则如下所示:

    符号描述运算规则
    &遇0则0
    |遇1则1
    ~求反,1变0,0变1
    ^异或不进位加(相同为0,相异为1)
    >>右移左补符号位
    <<左移右补0
    >>>无符号右移左补0
    注:
    1、在这6种操作符,只有~取反是单目操作符,其它5种都是双目操作符。
    2、位操作只能用于整形数据,对float和double类型进行位操作会被编译器报错。
    3、位操作符的运算优先级比较低,因此尽量使用括号来确保运算顺序,否则很可能会得到莫明其妙的结果。比如要得到像1,3,5,9这些2^i+1的数字。写成int a = 1 << i + 1;是不对的,程序会先执行i + 1,再执行左移操作。应该写成int a = (1 << i) + 1;
    4、另外位操作还有一些复合操作符,如&=、|=、 ^=、<<=、>>=。
    

    2、常用位操作小技巧

    下面对位操作的一些常见应用作个总结,有判断奇偶、交换两数、变换符号及求绝对值。这些小技巧应用易记,应当熟练掌握。

    1.判断奇偶

    只要根据最末位是0还是1来决定,为0就是偶数,为1就是奇数。因此可以用
    if ((a & 1) == 0 )代替if (a % 2 == 0)来判断a是不是偶数。
    下面程序将输出0到100之间的所有奇数。

        static void oddOrEven() {
            IntStream.rangeClosed(1, 100)
                    .filter((i) -> (i & 1) == 1)
                    .forEach(System.out::println);
        }
    

    2.交换两数

    一般的写法是:

    static void swap(int a, int b) {
    	//定义一个临时变量
    	int c = a;
    	a = b;
    	b = c;
    }
    
    static void swap(int a, int b) {
            a = a^b;
            b = a^b;
            a = a^b;
            System.out.println("a=" + a + ",b= " + b);
        }
    

    可以这样理解:
    第一步:a = a^b
    第二部:b = a^b = (a^b)^b=第一步的值b。由于运算满足交换律,(a^b)^b=a^b^b。由于一个数和自己异或的结果为0并且任何数与0异或都会不变的,所以此时b被赋上了a的值。
    第三步 a=a^b,由于前面二步可知a=(a^b),b=a,所以a=a^b即a=(a^b)^a。故a会被赋上b的值。

    再来个实例说明下以加深印象。int a = 13, b = 6;
    a的二进制为 13=8+4+1=1101(二进制)
    b的二进制为 6=4+2=0110(二进制)
    第一步 a=a^b a = 1101 ^ 0110 = 1011;
    第二步 b=a^b b = 1011 ^ 0110 = 1101;即b=13
    第三步 a=a^b a = 1011 ^ 1101 = 0110;即a=6

    3.变换符号

    变换符号就是正数变成负数,负数变成正数。
    如对于-11和11,可以通过下面的变换方法将-11变成11
    1111 0101(二进制) –取反-> 0000 1010(二进制) –加1-> 0000 1011(二进制)
    同样可以这样的将11变成-11
    0000 1011(二进制) –取反-> 1111 0100(二进制) –加1-> 1111 0101(二进制)
    因此变换符号只需要取反后加1即可。完整代码如下:

    	static void signReversal(int a) {
            a = ~a + 1;
            System.out.println(a);
        }
    

    4.求绝对值

    位操作也可以用来求绝对值,对于负数可以通过对其取反后加1来得到正数。对-6可以这样:
    1111 1010(二进制) –取反->0000 0101(二进制) -加1-> 0000 0110(二进制)
    来得到6。
    因此先移位来取符号位,int i = a >> 31;要注意如果a为正数,i等于0,为负数,i等于-1。然后对i进行判断——如果i等于0,直接返回。否之,返回~a+1。完整代码如下:

    	static void abs(int a) {
            a = (a >> 31) == 0 ? a : ~a + 1;
            System.out.println(a);
        }
    

    现在再分析下。对于任何数,与0异或都会保持不变,与-1即0xFFFFFFFF异或就相当于取反。因此,a与i异或后再减i(因为i为0或-1,所以减i即是要么加0要么加1)也可以得到绝对值。所以可以对上面代码优化下:

        static void absNoDecide(int a) {
            int i = a >> 31;
            a = (a ^ i) - i;
            System.out.println(a);
        }
    

    注意这种方法没用任何判断表达式,因此建议读者记住该方法(^_^讲解过后应该是比较好记了)。

    5、获得int最大值

    System.out.println((1 << 31) - 1);// 2147483647, 由于优先级关系,括号不可省略
    System.out.println(~(1 << 31));// 2147483647
    

    6、获得int型最小值

    System.out.println(1 << 31);
    System.out.println(1 << -1);
    

    7、获得long类型的最大值

    System.out.println(((long)1 << 127) - 1);
    

    8、乘以2运算

    System.out.println(n << 1);
    

    9、除以2运算(负奇数的运算不可用,精度缺失)

    System.out.println(n >> 1);
    

    10、m乘以2的n次方

    System.out.println(m << n);
    

    11、m除以2的n次方

    System.out.println(m >> n);
    

    12、取两个数的最大值(某些机器上,效率比a>b ? a:b高)

    System.out.println(b & ((a - b) >> 31) | a & (~(a - b) >> 31));
    

    13、取两个数的最小值(某些机器上,效率比a>b ? b:a高)

    System.out.println(a & ((a - b) >> 31) | b & (~(a - b) >> 31));
    

    14、判断符号是否相同(true 表示 x和y有相同的符号, false表示x,y有相反的符号。)

    System.out.println((a ^ b) > 0);
    

    15、计算2的n次方 n > 0

    System.out.println(2 << (n - 1));
    

    16、判断一个数n是不是2的幂

    /*如果是2的幂,n一定是100... n-1就是1111....所以做与运算结果为0*/
    System.out.println((n & (n - 1)) == 0);
    

    17、求两个整数的平均值

    System.out.println((a + b) >> 1);
    

    18、从低位到高位,取n的第m位

    int m = 2;
    System.out.println((n >> (m - 1)) & 1);
    

    19、从低位到高位.将n的第m位置为1

    /*将1左移m-1位找到第m位,得到000...1...000 n在和这个数做或运算*/
    System.out.println(n | (1<<(m-1)));
    

    20、从低位到高位,将n的第m位置为0

    /* 将1左移m-1位找到第m位,取反后变成111...0...1111 n再和这个数做与运算*/
    System.out.println(n & ~(0 << (m - 1)));
    

    常见操作技巧

    取高位右移,取低位相与

    3、位操作与空间压缩

    筛素数法在这里不就详细介绍了,本文着重对筛素数法所使用的素数表进行优化来减小其空间占用。要压缩素数表的空间占用,可以使用位操作。下面是用筛素数法计算100以内的素数示例代码(注2):

    	static void getPrime() {
            int max = 100;
            boolean[] flag = new boolean[100];
            int[] primes = new int[max / 3 + 1];
    
            int i, j;
            int pi = 0;
            for (i = 2; i < max; i++) {
                if (!flag[i]) {
                    primes[pi++] = i;
                    /**
                     * 对于每个素数,它的倍数必定不是素数
                     */
                    for (j = i; j < max; j += i)
                        flag[j] = true;
                }
            }
    
            Arrays.stream(primes)
                    .limit(pi)
                    .forEach((p) -> System.out.print(p + ","));
        }
    

    在上面程序是用boolean数组来作标记的,boolean型数据占1个字节(8位),因此用位操作来压缩下空间占用将会使空间的占用减少八分之七。
    下面考虑下如何在数组中对指定位置置1,先考虑如何对一个整数在指定位置上置1。对于一个整数可以通过将1向左移位后与其相或来达到在指定位上置1的效果,代码如下所示:

    //在一个数指定位置上置1
    int i = 0;
    i |= i << 10;
    

    同样,可以1向左移位后与原数相与来判断指定位上是0还是1(也可以将原数右移若干位再与1相与)。

    //判断指定位上是0还是1
    int i = 1 << 10;
    if ((i & (1 << 10)) != 0) {
    	System.out.println("指定位上为1");
    } else {
    	System.out.println("指定位上为0");
    }
    

    扩展到数组上,我们可以采用这种方法,因为数组在内存上也是连续分配的一段空间,完全可以“认为”是一个很长的整数。先写一份测试代码,看看如何在数组中使用位操作:

    		int[] bits = new int[40];
    
            for (int m = 0; m < 40; m += 3) {
                bits[m / 32] |= (1 << (m % 32));
            }
    
            // 输出整个bits
            for (int m = 0; m < 40; m++) {
                if (((bits[m / 32] >> (m % 32)) & 1) != 0) {
                    System.out.print('1');
                } else {
                    System.out.print('0');
                }
            }
    

    运行结果如下:
    1001001001001001001001001001001001001001

    可以看出该数组每3个就置成了1,证明我们上面对数组进行位操作的方法是正确的。因此可以将上面筛素数方法改成使用位操作压缩后的筛素数方法:

    	static void getPrimeByBitwise() {
            int max = 100;
            int[] flag = new int[max/32 + 1];
            int[] primes = new int[max / 3 + 1];
    
            int i, j;
            int pi = 0;
            for (i = 2; i < max; i++) {
                if ((((flag[i/32] >> (i % 32))& 1) == 0)) {
                    primes[pi++] = i;
                    /**
                     * 对于每个素数,它的倍数必定不是素数
                     */
                    for (j = i; j < max; j += i)
                        flag[j/32] |= (1 << (j % 32));
                }
            }
    
            Arrays.stream(primes)
                    .limit(pi)
                    .forEach((p) -> System.out.print(p + ","));
        }
    
    展开全文
  • 二进制第2位的位权为2,第3位的位权为4,对于 N进制数,整数部分第 i位的位权为N-j。数码所表示的数值等于该数码本身乘以一与它所在数位有关的常数,这常数称为“位权”,简称“权”。...
  • 展开全部1101.1转换32313133353236313431303231363533e78988e69d8331333365633938为10进制为13.5进制转换是人们利用符号来计数的方法...位权是指,进位制中每一固定位置对应的单位二进制数转换为十进制数二进制数第...
  • 数位进制转换详解

    千次阅读 2021-01-16 20:24:26
    十进制数:3765,如何转换成二进制数? 第一步,写出二进制的权数如下: 第十二 第十一 第十 第九 第八 第七 第六 第五 第四 第三 第二 第一 2048 1024 512 256 128 64 32 16 8 4 2...
  • 整数的二进制表示与运算.png十进制要理解整数的二进制,我们先来看下熟悉的十进制。十进制是如此的熟悉,我们可能已忽略了它的含义。比如123,我们不假思索就知道它的值是多少。但其实123表示的1(10^2) + 2(10^1) ...
  • 关于二进制转10进制的按展开

    千次阅读 2021-05-14 11:30:40
    我的疑问点是:为什么其他进制展开就直接是10进制?? 简单的一句话就是因为的你的项结果 是用10进制表示 下面开始详解: 我们以 11111 为例子: 转为10进制的时候:1x24+1x23+1x22+1x21+1x20 = 31 16+8+4+2+...
  • 生成n的所有二进制数

    千次阅读 2020-03-12 04:48:52
    需求要求输入位数n,生成所有情况的二进制数并存进数组 实现12345678910111213141516171819202122232425262728293031import java.util.ArrayList;import java.util.List;/** * @Classname BinaryList * @...
  • 二进制数与十进制数的转换 聊二进制数的运算前,我们先看看二进制数的值与十进制数的值是如何相互转换的, 十进制转换成二进制 ...只需将二进制数的各数位的值和位权相乘,然后将相乘的结果相加即可,有木有...
  • 十进制数转化为二进制数的两种方法

    万次阅读 多人点赞 2020-12-29 21:14:52
    如果我们要把十进制的150转化为二进制数,可以使用下面两种方法: 第一种方法:表格法 这种方法的核心思想就是用二进制的各位来“拼凑”出我们的十进制数。 我们先把二进制各位的位权列在表格里面。(我们如何...
  • 详解计算机内部存储数据的形式—二进制数 前言 要想对程序的运行机制形成一大致印象,就要了解信息(数据)在计算机内部是以怎样的形式来表现的,又是以怎样的方法进行运算的。在 C 和 Java 等高级语言编写的 程序...
  • 1:数制转换 ...使用按展开法将二进制数转换为十进制数,使用短除法除2取余计算十进制数转换为二进制数。 1.3 步骤 实现此案例需要按照如下步骤进行。 步骤一:二进制转十进制 1)二进制...
  • 2007-04-06二进制二进制怎么理解~!二进制18世纪德国数理哲学大师莱布尼兹从他的传教士朋友鲍威特寄给他的拉丁文译本《易经》中,读到了八卦的组成结构,惊奇地发现其基本素数(0)(1),即《易经》的阴爻- -和__阳爻,...
  • 二进制数 01100011 转换成的十进制数是什么?二进制数 01100011 转换成的十进制数是99。拓展:进制转换进制转换是人们利用符号来计数的方法。进制转换由一组数码符号和两基本因素“基数”与“位权”构成。基数是指...
  • 数据是用二进制数表示的

    千次阅读 2021-05-22 06:50:10
    8种机械键盘轴体对比本人程序员,要买一写代码的键盘,请问...将二进制数的各数位的值和位权相乘后再相加, 即可转换成为十进制数.92二进制数00001111左移两位后, 会变成原数的几倍?4倍二进制数左移1位后会变成原...
  • 二进制数表示法

    千次阅读 2020-08-08 15:29:16
    二进制数表示法 二进制数是数字电路中应用最广泛的一种数值表示方法,在逻辑代数中也经常使用。...式中ki是第i位的系数,它可能是0~9十数字中的任何一,10i叫做第i位的位权,ki10i是第i位的数值。若整
  • 因此想要读明白这部分代码,对于计算机的二进制操作以及运算是必须要了解的,那么本篇我们就开始详细的学习二进制操作以及运算整数的二进制运算要理解整数的二进制,我们先来看看最熟悉的十进制,例如123这值...
  • 1 在计算机中为什么使用二进制数在计算机中,广泛采用的是只有"0"和"1"两基本符号组成的二进制数,而不使用人们习惯的十进制数,原因如下:(1)二进制数在物理上最容易实现。例如,可以只用高、低两电平表示"1"和...
  • 二进制数及其运算

    千次阅读 2020-07-28 08:14:13
    什么是二进制数呢?如何使用二进制进行加减乘除?二进制数如何表示负数呢?本文将为你揭晓。 为什么用二进制表示 计算机内部是由IC电子元件组成的,其中CPU和内存也是IC电子元件的一种,CPU和内存使用IC电子元件作为...
  • 详解计算机内部存储数据的形式—二进制数 前言 要想对程序的运行机制形成一大致印象,就要了解信息(数据)在计算机内部是以怎样的形式来表现的,又是以怎样的方法进行运算的。在 C 和 Java 等高级语言编写的 程序...
  • 数制是人们利用符号进行计数的科学方法。数制有很多种,在计算机中常用的数制有:十进制,二进制和十六进制。1. 十进制数人们通常使用的是十进制。它的特点有两:有0,1,2….9十... 二进制数有两特点:它由两...
  • 二进制计算

    千次阅读 2021-07-21 05:31:49
    虽然很早就接触了二进制,却一直没有正视这问题,阅读《计算机科学导论》的时候,基本上是跳过了这一部分,总是以“这么基础的东西,反正工作中基本用不上”的理由给搪塞过去。最近正在阅读《编码》和《程序员的...
  • 十进制转二进制

    2021-06-24 12:40:04
    十进制数转换为二进制数时,由于整数和小数的转换方法不同,所以先将十进制数的整数部分和小数部分分别转换后,再加以合并。中文名十进制转二进制外文名Decimal system to binary system适用领域电子、编程、编码...
  • 进制转换与运算

    2021-05-23 06:09:16
    二进制“001”为例, 每一都是一bit。二进制只能由0/1组成,所以正好可以表示bit。什么是byte1bit只能表示两种信号或者两种状态,表示的范围很小,例如英文字母26就无法表示。所以规定8bit一组作为一...
  • 二进制数据是用0和1两数码来表示的。它的基数为2,进位规则是“逢二进一”,借位规则是“借一当二”。二进制数据也是采用位置计数法,其位权是以2为底的幂。例如二进制数据110.11,其权的大小顺序为2^2、2^1、2^...
  • 位的英文bit是二进制数位(binary digit)的缩写。 二进制数的位数一般是8的倍数,这是因为计算机所处理的信息的基本单位是8位二进制数。 8位二进制数被称为一字节,字节是最基本的信息计量单位。 位是最小单位...
  • 分析:将二进制转化为十进制,只要将二进制数的每一乘以该然后相加 */ #include "iostream" using namespace std; //计算x的n次方 double power(double x,int n); int main() { int value=0; cout&...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 60,260
精华内容 24,104
热门标签
关键字:

二进制个数位的权是