帮助你快速懂得心算十进制转二进制。(自创功法,理解就会,不会你砍我)

目录:

1.熟记二进制几个特殊数字。

2.找到二进制的转换规律。

3.转二进制的规则理解。

4.举例消化,一举例你就明白了。

~~----------------------------------------------------------------------------------------------------------------------------------------

前言:前面看不懂,可以先看举例。

----------------------------------------------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------------------------------------------

一:熟记二进制几个特殊数字。

----------------------------------------------------------------------------------------------------------------------------------------

问:为什么只记忆这几个数字?

答:因为IP地址使用二进制表示,范围是从00000000.00000000.00000000.00000000到11111111.11111111.11111111.11111111,而0在二进制和十进制中都是0,而二进制的11111111在十进制中就是255,所以IP地址就是从0.0.0.0到255.255.255.255。

十进制数字 二进制表示
128 1000 0000
192 1100 0000
224 1110 0000
240 1111 0000
248 1111 1000
252 1111 1100
254 1111 1110
255 1111 1111

----------------------------------------------------------------------------------------------------------------------------------------

2.找到二进制的转换规律。

----------------------------------------------------------------------------------------------------------------------------------------

十进制数字 规律
128 128+ 2^6 (64)=192
192 192+ 2^5 (32)=224
224 224+ 2^4 (16)=240
240 240+ 2^3 (8)=248
248 248+ 2^2 (4)=252
252 252+ 2^1 (2)=254
254 254+ 2^0 (1)=255
255 255是最后一个

你会发现规律,从128--225,每两个数之间的差是递减的:64-32-16-8-4-2-1.把这个记住。
----------------------------------------------------------------------------------------------------------------------------------------

3.转二进制的规则理解。

----------------------------------------------------------------------------------------------------------------------------------------
上面的都记住之后,我们就可以开始理解这个算法了。

规则1:

我们把8位的二进制,从右向左,对应数字 2的0次方(2^0) 至 2的7次方(2^7)。那么写出来就是:

1111 1111
128 -64-32-16 8-4-2-1

这个不难理解,将这个记住就ok。

规则2:

将X(0<X<256)转二进制,我们开始计算(128.64.32.16.8.4.2.1)哪些加起来等于X。我们只算加起来等于X,我们不算减法等于X,因为减法需要向前借一位,个人感觉比较复杂,不建议。

规则3:

在转化二进制中,128.64.32.16.8.4.2.1,这八个数,用到哪个,哪个对应的位置就写1,其他为0.
----------------------------------------------------------------------------------------------------------------------------------------

4.举例消化,一举例你就明白了。

----------------------------------------------------------------------------------------------------------------------------------------

先把规则1写下来,再开始看例子。

例1:

将 129转换成二进制。

算法:在128.64.32.16.8.4.2.1中选择数字加起来等于129.我们发现128+1=129.
我们知道128用二进制表示是 1000 0000(最开始就让你记忆的那些数字),再加上规则三,用到哪个数,哪个数就写1,因此我们得到答案是:1000 0001

例2:

将168转换成二进制。

算法:我们发现128+40=168,32+8=40,所以就是128+32+8=168,所以我们把对应的数字写成1,因此我们得到的答案是: 1010 1000

例3:

将244转换成二进制。

算法:我们发现我们已经知道240的二进制了:1111 0000,(之前记忆的),那么就是240+4=244.所以我们将240的二进制写出来,然后将4对应的位置写成1。因此我们得到的答案就是1111 0100.

例4:

将253转换成二进制。

算法:我们已经知道252的二进制了:1111 1100(之前记忆的),那么就是252+1=253,所以我们将1对应的位置写成1,得到答案1111 1101

例5:

将80转成二进制。

算法:64+16=80,将64和16这两位写成1,那么得到答案:0101 0000,最前面的0可以省略,所以我们的答案也可以写成101 0000

总结:我们发现我们转换X成二进制的时候,我们都是挑选最靠近X的数,而且已经是我们记忆过的数字,然后再进行加法运算。所以,只要记住前面的特殊数字和三个法则,稍稍练习,你就完全可以心算二进制。

原文地址:https://blog.51cto.com/14558454/2441938

时间: 2024-07-31 16:48:02

帮助你快速懂得心算十进制转二进制。(自创功法,理解就会,不会你砍我)的相关文章

十进制转二进制-快速算法

#include<iostream> #include<string> #include<algorithm> using namespace std; int main(int agrc, char *agrv[]) { int iInPut = 0; while (cin >> iInPut) { string sBinary;//转换后的二进制存储为字符串,调用了默认构造函数初试化为空串 int temp = abs(iInPut); if (temp

js 位运算符 以及 心算十进制二进制相互转换

位运算符 |(或) 运算 有1即为1,双0才为0 1 31| 2 = 11111 | 10 = 11111 = 3 2 3 | 4 = 11 | 100 = 111 = 7 3 6 | 7 = 110 | 111 = 111 = 7 4 10 | 9 = 1010 | 1001 = 1011 = 11 &(与) 运算 有0即为0,双1才为1 1 31 & 2 = 11111 & 10 = 00010 = 2 2 3 & 4 = 11 & 100 = 000 = 0

Formiko总结整数十进制转换二进制原理

引子: 为什么十进制转二进制的“辗转相除记录余数倒序输出”的算法是正确的?这个问题陪伴了Formiko半年. 实践: 实践一:把十进制数100转换成二进制数的图   上图和和下图唯一的区别在最后一位上,只是除到0和除到1的区别,但在算法本身的理解上应该不会有本质的区别. 实践二: 十进制数100或许太大,不便于一目了然的验证.试一试十进制数1,2,3. 思考: 以上算法的思路是“对原数反复进行除法得到余数,最后将余数倒序输出”.但是看到如图对十进制数100,1,2,3的操作,都看不出原思路的由来

三行代码写十进制转二进制

同学c++补考,找我帮忙写十进制转二进制的代码,为了让这同学能记住,所以就想写的简单些,然后没想到居然能这么简单,感觉还不错.直接上代码: void DtoB(int d) { if(d/2) DtoB(d/2); cout<<d%2; } 考虑到有人很懒,喜欢复制就能用的代码,所以下面贴一个带主函数的完整代码好了: #include<iostream> using namespace std; void DtoB(int d) { if(d/2) DtoB(d/2); cout&

十进制转二进制

十进制转二进制的递归实现算法: 1 #include <stdio.h> 2 void dectobi(int a); 3 4 int main() 5 { 6 int i; 7 printf("please input a decimical number\n"); 8 scanf("%d",&i); 9 printf("the binary number is:"); 10 dectobi(i); 11 return 0;

十进制转换为二进制序列,并输出1的个数,和序列的奇偶序列

★十进制转换为二进制序列,并输出1的个数,和序列的奇偶序列 #include<stdio.h> int main() { int m,i,x,y; char a[32];//int为4个字节长,占32个bit位 int count=0; printf("请输入一个数:\n"); scanf("%d", &m); for (i = 0; i < 32; i++) { if (m%2 == 1)         //统计序列中1的个数 { co

C语言 十进制转换二进制

十进制转换二进制主要采用的是连除倒取余的方法  代码如下 int num = 8; int tempArr[32]={0}; int i = 0; while (num / 2 != 1 ) { tempArr[i] = num % 2; num /=2; i++; } tempArr[i+1] = 1; for (int j = sizeof(tempArr)/sizeof(int)-1; j>=0; j--) { printf("%d", tempArr[j]); }

C++进制转换(十进制转二进制、八进制、随意进制)

十进制转二进制: //十进制转二进制 #include<iostream> using namespace std; void printbinary(const unsigned int val) { for(int i = 16; i >= 0; i--) { if(val & (1 << i)) cout << "1"; else cout << "0"; } } int main() { prin

十进制与二进制之间的自由转换

#include <stdio.h>#include<stdlib.h>int main(){    int Type,a,b[10],i=0,c=0;    printf("请输入转换类型 1:十进制转二进制:2:二进制转十进制;\n");    scanf("%d",&Type);    printf("请输入原数据\n");    scanf("%d",&a);    switch