二进制算法例子的具体算法

二进制是怎么算的,谁详细解说下。举几个例子_百度知道
二进制是怎么算的,谁详细解说下。举几个例子
我有更好的答案
十进制 变二进制:采用 除以2,取余数;得数(整数)再除以2取余数;循环直到得数为0止;然后把 得到的余数由后向前依次写出即可。如
十进制 10 变二进制 10/2 = 5 余0 5/2
余1 2 /2 =1 余 01/2
= 0 余1计算结束,把余数从后向前写出:1010,即十制10 变为二进制后是1010;二进制计算 与 十进制计算类似,只不过是逢二进。以加法为例:0 + 0 = 0 0+1 =11+0 = 01+1= 10//如二进制 100 + 101计算
1 0 1---------- 1 0 0 1相当于十进制 4+5 = 9
采纳率:72%
是数字转换 还是什么
二进制用0和1表示
比如数字7和数字5
7=(111)2进制
谢谢啦,明白了,想了好久。。
为您推荐:
其他类似问题
二进制的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。豆丁微信公众号
君,已阅读到文档的结尾了呢~~
主域控、辅助域控的搭建以及主域控制器的迁移(2003)
扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
二进制算法及其应用
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='http://www.docin.com/DocinViewer--144.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口  十进制转二进制的过程,说白点就是把人类算数的方式转换成机器语言(二进制),前者数据量巨大,后者只有0和1,占用很小,我们所熟悉的CPU便是使用二进制算法处理进程的,当然,二进制的使用可能较少,但我们有理由去了解。
  十进制(以十为基础进位)数系的每一个位值有十个可能的值(0、1、2、3、4、5、6、7、8、9)。相反二进制(以二为基数进位)数系只有两个可能的值,即0和1。二进制系统是电子计算机的基本语言,真正的电脑程序员应了解如何将数字从十进制转换为二进制。
  如果你是程序员,相信你已经足够了解转换方法了。
十进制转二进制的方法
  方法一、余数短除法除以二
  1、明确问题。举个例子,我们现在是要将一个十进制数字15610转换成二进制数字。先将这个十进制数作为被除数写在一个倒着的&长除法&的符号里。把目标数系的基数(在这里二进制是&2&)作为除数写在这个除法符号的外面。
  用这个方法将计算过程可视化会更方便理解,因为整个计算过程只需将数字一直除以2。
  为了防止转换前后发生混淆,建议将数系的基数写作每个数字的脚注形式。在本例中,十进制数字的脚注为10,二进制数字的脚注为2。
  2、进行除法运算。把结果的整数部分(商数)写在长除法符号的下面,然后把它的余数(0 或 1)写在被除数的右边。
  我们现在是以2为除数,因此得出的商为偶数,则余数为0;如果得出商为奇数,则余数记为1。
  3、一直往下继续除,直到商为0为止。把每一个新的商数除以二,然后把余数写在被除数的右边。直到商数为0为止。
  4、写出新的二进制数字。从最下面的余数开始,按顺序读到最上面。本例中,你会得到。这就是十进制数字156的二进制形式。或者,我们可以以脚注等式的形式表达,即:15610 =
  活用这个方法可以将所有十进制数字转换成任何进制表达。除数为2是因为我们最终想得到的以2为基数的数(即二进制数值) 。如果最终想得到其他数系的数字,用目标数系的基数代替这个方法里二进制的基数2 就可以了。例如,要得到基数为9的数,就用9来代替2作为除数 。最终的结果就是目标数系的数字表达。
  方法二、降二次幂及减法混合运算
  1、列表。将以2为底数的幂函数以表格形式从右到左列出来。从20开始,20为1。指数加一递增。列表直至函数值最接近需要计算的十进制数字为止。比如说,我们现在要将十进制数字15610转换为二进制。
  2、找出最合适的幂函数值。找出小于且最接近需计算数字的幂函数值。在本例中,128是小于156的、以2为底数的幂函数值中最大的数值。所以在二进制列表128的下方写上1。然后用156减去128,得出28。
  3、继续计算。刚刚得出新得数28继续进行比较计算,看看哪一个幂函数值小于28。函数列表的下一个数字为64,64大于28,所以在64下方写上0。如此类推,看看那个数字小于28。
  4、能减的数字记为1。本例中,64和48都不能被28减,得出正数。16可以被28减,得出12。8也能被12减,得出正数,所以在16和8下方都写上1。现在的差为4。
  5、继续减法运算,直到列表的最后。记住在能被差减得出正数的数字下面记录为1,不能被减的数字下面记录为0。
  6、写出二进制答案。得出的二进制数值就是列表下记录的数字排列。你应该能得出。这就是十进制数字156的二进制表达。或者,我们可以以脚注等式的形式表达,即:15610 =
  多次反复使用这个方法,你就能基本记住以2为底数的幂函数的值。就可以跳过第一步列表的步骤了。
  小提示:
  ● 操作系统里安装好的计算器也可以用作十进制和二进制之间的转换,但作为一个程序员,能清楚地了解这个转换的原理会更好,点击&查看& 然后选择 &程序员&就可以看到转换器了。
  ● 反过来转换,从二进制转换为十进制通常更容易入门。
  ● 多练习,试着转换十进制数 1,和 810。你会分别得到以下二进制答案 :,1111112,和10002. 试着转换2,和 24110,会得出,110012,和.
  以上内容便是十进制转二进制的方法介绍,二进制虽然是当下计算机流行的一种架构,但计算机并不仅仅只有二进制,还有三进制算法,这是后话&&
上篇 :下篇 :相关推荐二进制算法
当十进制为正数的时候9,首字节为0
当十进制为负数的时候 -9,首字节为1 二进制:
正数的原码反码补码都一样
补码的和:
二进制转化为十进制
1*2^3+1*2^2+1*2^1+1*2^0=8+4+2+1=15
-6+9二进制
补码的和:
超过本有的进制超长度去后面的长度
反码:补码和减去-1
-(2^1+1*2^0)=-3
如果是负数与负数相加提出符合进行整合最后赋值
没有更多推荐了,算法笔记:二进制数有多少个1
32位的整数的二进制数表示有多少个1?
一开始最容易想到的方法就是与2求余在除以2。这么一个循环来解决问题
所以一开始就写出了以下代码
public int countOnes(int num) {
int n = 0;
while(num != 0 ){
if(num %2 == 1 ){
以上代码效率不会特别高,还能够进行改进。最简单的改进方式就为将除以2这一部分改为二进制。但是该代码还是存在这BUG的,这里所说的32位整数并没有说明是否为带符号数。可以检验,这种方法只适用于不带符号的数字。那么考虑负数的话,如果余数为-1.也应该在计数的时候加上。于是就有下面代码
public int countOnes(int num) {
int n = 0;
while(num != 0 ){
n += num & 0X;
num &&&= 1;
这里有一个小点注意,因为这里使用的是java。所以对于带符号数,应该使用&&&的移位符号。而&&用于的是不带符号数。这样的话仅仅是对于第一种方式的补充还有改进
那么有没有存在更高效的算法呢?当然存在的。
相比与余操作,位操作的效率要高很多。时间复杂度为O(log2N),其中N为二进制的位数
那么我们就可以想能不能使用算法只判断“1”就好了呢?。于是如果希望结果为0的话,那么该数与比他小1的数做与操作,那么就可以得到0.
举个例子,比如1001,先有 = 1000
再有 = 0000
那么就会有下面解法
public static int countOnes(int num) {
int n = 0;
for(;num != 0;n++){
num &= (num-1);
那么这一种算法会不会像第一种算法那样对于符号数是行不通的呢?其实经过测试的时候发现这种方法适用于任何情况。因为无论是带符号数还是不带符号数,在计算机中都是以二进制来存储的。那么直接进行二进制运算,当然是不存在任何问题的。这种算法的时间复杂度为O(M),M为1的个数。
当然是否存在着更快的算法呢?我们时常会使用列表的方法,以达到空间换时间的目的。所以列表法的速度是非常快的,达到O(1)。不过32位的数的话,这表有点长啊~
没有更多推荐了,

我要回帖

更多关于 二进制算法教程 的文章

 

随机推荐