精华内容
下载资源
问答
  • 32位系统sizeof(int)=4,也就是有32位二进制数,内存是以32位二进制补码的形式存放这个的,int为有符号,最前面一个数字是符号位,0表示正数,1表示负数。 也就是31位存储这个的大小。 正数的补码就是他的...

    应该也是我们班的,比我学的好多了啊!!!

     

    32位系统sizeof(int)=4,也就是有32位二进制数,内存中是以32位二进制补码的形式存放这个数的,int为有符号数,最前面一个数字是符号位,0表示正数,1表示负数。

    也就是31位存储这个数的大小。

    正数的补码就是他的原码本身,也就是num%2  ,余数倒叙排列,不够32位的前面补0,

    例如,

    00000000 00000000 00000000 00000001   表示1,

    00000000 00000000 00000011 00000000   表示的是2的9次方+2的8次方=768。

    最大int 

    01111111 11111111 11111111 11111111   表示2的31次方-1=2147483647

    负数的补码是他对应正数的原码的反码,再+1得到的。

    如-1,对应的1的原码 

    00000000 00000000 00000000 00000001

    1的反码    

    11111111 11111111 11111111 11111110

    反码加1为           

    11111111 11111111 11111111 11111111   这也就是内存中-1的存储方式。

    int表示的最大正整数2147483647对应的负数-2147483647的二进制为

    2147483647原码        

    01111111 11111111 11111111 11111111

     反码    

    10000000 00000000 00000000 00000000

    反码+1       

    10000000 00000000 00000000 00000001

    那么int表示的最小的负数也就是 

    10000000 00000000 00000000 00000000  也就是 -2147483648

    知道原理了如何打印一个数的32位二进制码呢?

    1,先用原始的取余倒序排列,设要打印的数位num,

    对于正数,num%2的值也就是第32位,(num/2)%2取余也就是第31位,((num/2)/2)%2也就是第30位……

    定义一个有32个元素的数组a[32]来存放余数,用一个for循环来将余数赋给数组,

    for (i=0;i<32;i++ )

    {

    a[i]=num%2;

    num/=2;

    }

    a[0]存放第32位,a[1]存放第31位 ,  a[2]存放第30位……   打印只要用下面语句倒序打印数组a,就可以了。a[31]a[30].......a[1]a[0]

    for (j=31;j>=0;j--)

    printf ( "%d",a[j] );

    对于负数,他的存储方式也可以看做是,对应正数减去1之后的反码,如-1对应的正数1 减去1也就是0,

    0的原码 

    00000000 00000000 00000000 00000000

       反码    

    11111111 11111111 11111111 11111111  也就是-1的存储方式

    if(num<0)

    {

    num = -num-1;

    for (i=31;i>=0;i-- )

    {

    a[i]=num%2;

    num/=2;

    }

    }

    这里我改变了一下赋值顺序,先将正整数第32位赋给a[31]……也就是a[0]存放第一位,打印的时候顺序打印数组就可以了(对于正数)。我们最终是要打印负数的二进制表示,所以还要取反,可以用下面的语句。

    for (j=0;j<32;j++)

    b[i] = (a[i]+1)%2;

    那么,顺序打印数组b就可以了。

    以下是这种方法的实验图:




    2 用位操作打印。

    用位的左移右移,我们可以将其他位都置0,

    如  10100000 00001100 00000000 00000000我们左移2位再右移31位,就可以直接得到

          00000000 00000000 00000000 00000001       也就是上面的第2个1移到了最后一位,可以得到第30位的值

    每一位都如此操作,我们就可以得到每一位的值0或1,依次打印即可。

     但是对于一个有符号的数,位的操作会使符号一起移动,但是如果符号位为1,你右移之后,符号位会自动补1,

    如10000000 00001111 11110000 00001111  ,我们为了得到第1位的1,直接右移31位,我们预想的结果是

        00000000 00000000 00000000 00000001 ,但实际上,由于符号位为1,每次右移符号位都会自动补1,右移1位

        11000000 00000000 00000000 00000000,右移31位之后会变成

        11111111 11111111 11111111 11111111。

    为了得到想要的结果,我们可以把int赋值给一个unsigned int,这样,就可以用这个方法了。



    可以看到,我用了3种位操作的方法来打印,第3种是我上面讲的,

    第2种也是转换为无符号数,进行了一次位操作;

    第1种是在不转换为无符号数的情况下,进行位操作打印。结果都是正确的。


    展开全文
  • 无论多么复杂的信息,例如,图片、音乐、视频等,在计算机内部都是仅用“0”与“1”两简单数字表示的信息,对于在实际当中我们能理解的信息都是用这种数字进行了编码后向我们呈现的,这种数制叫做二进制。...

    计算机中不同进制数的表示

    在电子计算机的信息处理中,无论多么复杂的信息,例如,图片、音乐、视频等,在计算机内部都是仅用“0”与“1”两个简单数字表示的信息,对于在实际当中我们能理解的信息都是用这种数字进行了编码后向我们呈现的,这种数制叫做二进制。要了解计算机,首先要了解计算机中数的表示方法。

    任何一种数制都可以用以下四个规则来描述:

    基数规则;进位规则;位权规则,运算规则。这了区别不同数制表示的数,通常用右括另外的下标字母表示括号内的数制,十进制数用D表示,二进制用B表示,十六进制数用H表示。

    一、二进制

    用四个规则描述如下:二进制数只有“0”和“1”两个数字,基数是2,最大的数字是1,逢2进位,各位的权为以2为底的幂。例如,(0101101010)各位的权自至在依次为27、26、25、24、23、22、21、20。

    二进制数的算术四则运算规则,除进、借位外与十进制数相同。

    二进制加法规则

    0+0=0 1+0=1

    0+1=1 1+1=10

    二进制减法规则

    0-0=0 0-1=1-借位

    1-0=1 1-1=0

    二进制乘法规则

    0×0=0 1×0=0

    0×1=0 1×1=1

    例如:二进制数11110 101=110

    110

    101)11110

    -)101

    101

    -) 101

    00

    二进制的优点是:

    二进制只有“0”和“1”两数字,很容易表示。电压的高和低、 晶体管的截止与饱和、磁性材料的磁化方向等都可以表示为“0”和“1”两种状态。

    二进制数的每一位只有0和1两状态,只需要两种设备就能表示, 所以二进制数节省设备。由于状态简单,所以抗干扰力强,可靠性高。

    二进制的主要缺点是数位太长,不便阅读和书写,人们也不习惯。为此常用八进制和十六进制作为二进制的缩写方式。为了适应人们的习惯,通常在计算机内都采用二进制数,输入和输出采用十进制数,由计算机自己完成二进帛与十进制之间的相互转换。

    0+1=1 1+1=10

    二、十六进制与数制间的转换

    十六进制有0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F共十六个数字,其中A-F表示10-15的数字,基数是16,最大数字是15用F表示,逢16进位。

    十六进制数是二进制数的一种缩写方式,四位二进帛数有十六种组合,对应十进制数的0-15。二进制数转换为十六进制数的方法,从小数点开始左按四位分节,最高位和低位不足四位时,添0补足四位分节,然后用一个等值的十六进制数代换。反过来,十六进制转换成二进制的方法是:将每个十六进制数用4位二进制来书写,其最左侧或最右侧的可以省去。

    十进制数转换为二进制数,通常采基数乘除法。整数部分和小数部分分别转换,最后将两部分合起来,即为所转换的二进制数。

    整数部分转换用基数除法,即除以二进制数的基数2取余数,再将其商除以2取余数,重复这一过程直到商为0为止。第一次余数为二进制数的最低位,依次递增,最后一次余数为二进制数的最高位。

    小数部分转换用基数乘法,即乘以基数2取整数,将余下的小数再乘以2取整数,直到所需精度为止(小数部分的转换可能出现无限循环和无限不循环的情况)。第一次整数为二进制小数的第一位,依次递减,最后的整数为二进制小数的最低位。

    因为任何进制数的位权是用十进制数表示的,所以一个任何进制数都可以转化一个等价的十进制数?

    三、数制间的转换

    如何把十进制数转化为二进制、八进制?

    十进制数转换为二进制数规则:把十进制数用2一次次去除,直至商为0,将得到的余数从最后一次得到的余数依次读起即得,即“除2取余”。

    例如:将41变换为二进制

    1 0 1 0 0 1 余

    0 1 2 5 10 20 41

    即(41)D=(101001)B

    十进制转换为八进制规则:类似二进制,“除八取余”。

    例:41转换为八进制

    51 余

    0 5 41

    即41转换为八进制为51。

    如何把二进制、八进制转换为十进制

    二进制转化为十进制:(a1…an-1an)2

    =(a1×2^(n-1)+…+an×2^0)10

    八进制转化为十进制:(a1…an-1an)8

    =(a1×8^(n-1)+…+an-1×8^1+an×8^0)10

    例:(10001010)2=(1×2^7+0×2^6+0×2^5+0×2^4+1×2^3+0×2^2+1×2^1+0×2^0)10=(138)10

    (532)8=(5×8^2+3×8^1+2×8^0)10=(346)10

    如何使二进制、八进制相互转换

    二进制八进制规则:将十进制数从低位到高位分组,每三位一组,每组可代表0到7之间的数字,依次写下各组所代表的数字即得。

    例:(11001001)2=(011)(001)(001)

    3 1 1

    =(311)8

    八进制、二进制规则:

    将每位八进制数码分别用三位二进制数表示,并在这个0和1构成的序列去掉无用的前导0即得。

    例:(5163)=(101)(001)(110)(011)=(101001110011)2

    展开全文
  • 计算出二进制数中有多少1

    千次阅读 2012-04-17 23:15:11
    计算出二进制数中有多少1 《编程之美》这本书被很多计算机专业的学生奉为面试经典, 其中也包括我。早就听高年级学长说过,面试的题目有80%取自《编程之美》这本书, 掌握了其中的全部算法可以为...
    计算出二进制数中有多少个1

    《编程之美》这本书被很多计算机专业的学生奉为面试经典, 其中也包括我。早就听高年级学长说过,面试中的题目有80%取自《编程之美》这本书, 掌握了其中的全部算法可以为自己的面试带来很多的好处。从今天起, 我每天更新编程之美上的一个算法, 方便想要学习的童鞋学习。

    计算机专业的学生对二进制数应该都不陌生, 二进制就是由连续的有穷的0,1序列组成的数。那么, 我们的问题就来了, 现在我要统计一个01序列中有多少个1。那么, 我们应该怎么求解呢?

    解法1:普通的解法,二进制数中相邻的两个数位在十进制书中参在2倍的关系。那么,我们的算法就出来了, 不断的对目标十进制数取余, 如果v%2==1, 那么证明当前的对应的二进制数位的数值为1;否则为0。算法如下:

    int count(int v)

    {

        int number = 0;

        while(v)

        {

            if(v%2 == 1)

            {

                number++;

            }

            v /= 2;

        }

        return number;

    }

    学过算法的同学应该不难分析出来,算法的复杂性是O(logv)。

    解法2根据上述的算法, 我们发现上诉程序的收敛过程是目标数不断的除以2。我们知道,在计算机在运算的时候,对于除法的计算异常的复杂,所以在这里我们采用位运算。算法如下:

    int count(long v)

    {

        int number = 0;

        while(v)

        {

            if(v%2 == 1)

            {

                number++;

            }

            v >>= 1;

        }

        return number;

    }

    在这里, 我们在收敛过程中使用了位运算,提高了运行的速度。但是,因为算法本身没有发生变化,所以时间复杂度为O(logv)。

    解法3:在上述的算法中, 我们的知道, 算法的复杂度就是二进制数的长度,从某种意义上讲,我们对二进制进行了一个遍历。从而得到了我们的算法和分析。但是有没有更好的?在《编程之美》中 , 书中提供了一种更为快捷的算法, 时间复杂度是O(二进制数中1的个数)。

    那么,写这本书的大神是怎么想出来的呢?我想思路主要有以下的几点:

    (1)从算法的最有复杂度考虑:算法的最优的复杂度当然是O(1),但是这道题显然不能, 所以我们想到了下一个算法复杂度O(logN),这个复杂度是我们第一个解和第二个解的复杂度, 所以我们立马想到, 再优的算法当然就是在O(m)(m为二进制中的1的个数).

    (2)有了上面的分析, 那么我们就要构造出这个算法。想要达到这个算法复杂度, 我们就必须对二进制数进行必要剪枝,所谓剪枝就是减去掉二进制数中的0。那么怎么去掉呢?我们来分析以下二进制的构成:

                                                                0x1100010101000

    在上诉这个二进制数, 我们可以看到0,1交替出现,当我们用这个数减去一个1的时候, 我们发现最这个数最大的影响就是这个数的最后一一个1变为了0, 并且这个1后面全部的0变为了1, 于是我们可以想到对数进行“与”操作, 去掉受影响的部分,这样下去直到整个目标数变为0.算法复杂度还真就达到了上述的目标复杂度。

    算法如下:

    int count(long v)

    {

        int number = 0;

     

        while(v)

        {

            v &= (v-1);

            number++;

        }

        return number;

    }

    呵呵, 是不是很爽, 算法的魅力就在这里,我们可以用各种稀奇古怪的东西对计算的过程进行一系列的优化。

                    

    展开全文
  • 1. 对于一个数我们可以按照下面的方式来转成二进制, 2. 最大值最小值技巧,比如8位,可以用以下的表盘,

    1. 对于一个数我们可以按照下面的方式来转成二进制,



    2. 最大值最小值技巧,比如8位,可以用以下的表盘,



    展开全文
  • 2004年04月高等教育自学考试计算机原理试题课程代码:02384第部分选择题(共25分)...1.计算机中一次处理的最大二进制位数即为()A.位B.字节C.字长D.代码2.下列算式属于逻辑运算的是()A.1+1=2B.1-1=0C.1+...
  • 主要思路: 1.核心思想依然是经典的除2取余法。但是由于C语言整型数据能够存放的最大的整数为unsigned long int...3.采用该方法理论上(不考虑计算机硬件存储空间)可实现任意大小的十进制二进制数。 /*-----...
  • Java计算二进制数中1的个数

    千次阅读 2018-11-18 15:18:18
    前言 逐位法 查表法 Brian Kernighan法 分治法 Hamming Weight法 Hamming Weight优化法 ...江峰求算法 ... 昨天学习全组合时,突然涉及到如何计算二进制中1的问题,我就直接使用的Integer.bitCount的...
  • 一个长度最多为30位数字的十进制非负整数转换为二进制数输出 输入描述: 多组数据,每行为一个长度不超过30位的十进制非负整数。 (注意是10进制数字的个数可能有30个,而非30bits的整数) 输出描述: 每行输出对应...
  • 一个函数,返回数字中二进制位为'1'的个数。 比如36,化为二进制得到100100,其中有2个'1'。 方法1:分别判断各个位 int bit_count(unsigned int n) {  int count;  for(count = 0; n; n >>= 1...
  • 以下呢,是我对于8位二进制数中,-128的一些个人理解,希望错误之处请大家指正! 首先,-128是什么鬼?他是怎么出现的? -128就是二进制1000 0000(但大家肯定经历过自己的计算得知,计算出来后,结果就是错误!...
  • 十进制是逢十进,十六进制是逢十六进二进制就是逢二进,以此类推,x进制就是逢x进位。 我们常用的有以下几种进制: Bin 二进制Binary,简写为B,在Java的前缀表示为0b Oct 八进制Octal,简写为O,在Java...
  • 定义一个整型处理类IntegerProcessing,该类有以下成员函数:   <p>(1)返回整型参数的二进制表示1的个数的成员函数;   <p>(2)返回与整型参数的二进制模式...
  • 转载关于计算二进制数中1的个数

    千次阅读 2010-11-16 23:03:00
    二进制数中1的个数(摘) <br /> 写一个函数,返回数字中二进制位为'1'的个数。 比如36,化为二进制得到100100,其中有2个'1'。 <br />方法1:分别判断各个位 int bit_count...
  • 二进制

    2016-12-16 21:09:00
    二进制数系统,每个0或1就是一个位(bit),位是内存的最小单位。 8个bit 就是一个byte字节;即一个字节是八位,最小是0,最大是255。 255是十进制,转换为二进制是八个一。 0~255 为十进制的表示方式, 转换为...
  • 學習幫助問題描述:这些进制都代表些什么 2进制和10进制还有16进制都有什么分别它们都是些什么意思 我从网上找到这换算例:将25转换为二进制数解:25÷2=12 余数1,12÷2=6 余数0,6÷2=3 余数0,3÷2=1 余数1,...
  • 关于进制之间的转换,相信大家都知道怎么处理,也有很多文章,但是有些问题没有说明过,比如为什么二进制转八进制要取三合一法呢? 关于进制转换请参考以下文章: ...这里说明几点需要注意的地方: ...
  • Java二进制

    千次阅读 2020-09-19 08:55:34
    计算机看似能干很多活,其实也很苯,只认识0和1。因为电路的逻辑只有0和1两个状态,这里的0和1并不是数字的0和1,0和1是表示两种不同的状态,0表示低电平,1表示高电平。计算机是由无数个逻辑...这是一个二进制数10101
  • 1字节:最大0xFF = 255(存储类型byte和char) 2字节:最大0xFF FF = 65535(存储类型shot int) 4字节:最大0xFF FF FF FF= 4294967295(存储类型int 、long) 8字节:最大0xFF FF FF FF FF FF FF FF= ...
  • 1.如果你不知道二进制怎么编码,请继续,...1字节的二进制数中最大:11111111。  这个数的大小是多少呢?让我们来把它转换为十进制。  无论是什么进制,都是左边是高位,右边是低位。10进制是我们非常习
  • (带符号的二进制数的表示方法及加减法运算)★ 机器:在机器使用的连同符一起 代码化的。 按照机器的小数点位置是否固定,把分为:★ 定点★ 浮点数 所有数据的小数点位置固定不变。★ 定点小数 X0.X1...
  • 通过bitset输出二进制数

    千次阅读 2017-03-06 16:34:09
    做到笔试题时,难免会有需要将数字的二进制输出的情况,通过STL的bitset我们可以很轻松地完成这目标。  有些程序要处理二进制位的有序集,每位可能包含的是0(关)或1(开)的值。位是用来保存组项或条件...
  • 浏览复试题时,出现了读取“保存了...将10000数据保存为二进制文件用到了以下模块 ** struct ** struct 模块,可以执行 Python 值和以 Python bytes 对象表示的 C 结构之间的转换。这可以用来处理存储在文件...
  • 1. Java数字默认是十进制,二进制...在理解二进制和十进制转换后,对于一个整数,比如 7 ,我们知道二进制表示是 0111,但是一个负数的二进制怎么表示呢,你有想过 -8 怎么用二进制表示吗?在计算机,存储的都是...
  • 数字转换二进制比较大小

    千次阅读 2014-06-25 10:55:31
     2、计算两个二进制数字1的个数,个数多的数字为两者的大者;  3、负数按照其绝对值进行比较; 请利用地球人发明的计算机程序逼近都教授的特异功能,实现时可以有以下约束:  1、输入数据为范围在-32768到...
  • 二进制表示质数计算置位 给定两整数 L 和 R ,找到闭区间 [L, R] 范围内,计算置位位数为质数的整数个数。 (注意,计算置位代表二进制表示1的个数。例如 21 的二进制表示 10101 有 3 计算置位。还有,1 ...
  • 762.二进制表示质数计数置位 原题回顾: 给定两整数 L 和 R ,找到闭区间 [L, R] 范围内,计算置位位数为质数的整数个数。 (注意,计算置位代表二进制表示1 的个数。例如21 的二进制表示10101有3计算...
  • 32位系统sizeof(int)=4,也就是有32位二进制数,内存是以32位二进制补码的形式存放这个的,int为有符号,最前面一个数字是符号位,0表示正数,1表示负数。 也就是31位存储这个的大小。 正数的补码就是他的...
  • 下列各无符号十进制整数,能用八位二进制表示的数中最大的是( )。 A、296 B、133 C、256 D、199 正确答案:D 这考察二进制范围的理解,和细心。惯性思维知道八位二进制一共有28,所以我们就取了256,选了C...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 234,582
精华内容 93,832
关键字:

以下二进制数中最大的一个是