C语言基础之进制的那些事(1)

为什么会有不同的进制?

计算机采用二进制主要是为了方便硬件的实现,电流的通、断,或电压的高、低正好能够表示二进制的0和1两个数码。二进制好处分述如下:
一、可行性:若使用十进制数,则需要这样的电子器件,它必须有能表示0—9数码的10个物理状态,这在技术上是相当困难的(目前为止没有完全解决),而使用二进制数,只需0,1两个状态,技术上轻而易举,如开关的通与断,晶体管中导通与截止等,磁介质的带磁与不带磁。
二、可靠性:二进制只有两种状态,数字传输处理不易出错。
三、简易性:二进制运算法则比较简单,数值、图形、文字等各种形式的信息,需要计算机加工处理时,首先必须按一定的法则转换成二进制数.

用二进制数表示一个数值时,位数比较长,不便书写和记忆,所以人们常用八进制数十六进制数十进制数来表示二进制数.

二进制

范围:0、1

性质:逢二进一

八进制

范围:0、1、2、3、4、5、6、7

性质:逢八进一

十进制

范围:0、1、2、3、4、5、6、7、8、9

性质:逢十进一

十六进制

范围:0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F

性质:逢十六进一

进制之间怎么相互转换?

首先我们来看一个除法公式,从这个除法我们可以得出余数的求法。

余数   =   被除数     -  (商 * 除数)

3        =   23            -    (4   * 5)

高进制转低进制采用辗转相除法

低进制转高进制采用权相加法

十进制数和十六进制数采用8421码翻译成二进制数(适用于15以内的数,如果超过15就需要拆分成15以内的数之和再进行二进制运算)

十进制转换成2进制

100(10)转换成二进制:100 / 2 = 50....余0、50 / 2 = 25....余0、25 / 2 = 12....余1、12 / 2 = 6....余0、6 / 2 = 3....余0、3 / 2 = 1....余1、1 / 2 = 0....余1。

十进制转换成二进制:采用的是辗转相除法,十进制数除以2其得到的商继续除以2直到商为0为止,然后再将得到的余数倒叙排列就是二进制对应的十进制数。比如十进制数100转换成二进制数为1100100。

那么逢二进一又是什么意思?又怎么具体使用呢?

比如十进制数9用二进制数表示:二进制数运算规则是逢二进一,二进制数表示只有数字0和1。

将十进制数9拆分为(1+1) +(1+1) +(1+1) +(1+1) +1  =  10 + 10 + 10 + 10 + 1

其中的(1+1)= 10 就是采用二进制的逢二进一运算规则。

后面的10 + 10 + 10 + 10 + 1 = 10 + 10 + 10 + 10 + 01涉及到二进制的加法,二进制的加法规则很简单,低位和低位相加,高位和高位相加,配合二进制的逢二进一运算规则可以得出最后的答案:(10 + 10) + (10 + 10) + 01 = 100 + 100 + 01 = 1000 + 01 = 1001。

确实上面的十进制数和十六进制数可以采用8421规则得出相应的二进制数,8421码对应着4位二进制数,8对应千位、4对应百位、2对应十位、1对应个位,比如上面的十进制数9按照8421码规则可以很轻松写出其二进制数1001,再比如十六进制数F变化成二进制就是四个1,F(16) = 1111(2)。

高进制转低进制请参照十进制转二进制的方法。

二进制转十进制



口诀:整数二进制用数值乘以2的幂次依次相加,小数二进制用数值乘以2的负幂次然后依次相加。

1、整数二进制转换为十进制:首先将二进制数补齐位数,首位如果是0就代表是正整数,如果首位是1则代表是负整数。

若二进制补足位数后首位为1时,如下图所示,就需要先取反再换算:

2、小数的二进制转换为十进制:将二进制中的四位小数分别于下边(如下图所示)对应的值相乘后相加得到的值即为换算后的十进制

原文地址:https://www.cnblogs.com/iBoundary/p/11710467.html

时间: 2024-11-14 23:53:48

C语言基础之进制的那些事(1)的相关文章

C语言博客(6)编程基础之进制之间的转换

在本人的C语言博客的内容中,前面两篇随笔对二进制.八进制和十六进制进行了说明,接下来讲一下不同进制之间的数字是如何转换的,这在编程中经常会用到,尤其是C语言. 其他进制向十进制转换 在C语言学习中,二进制.八进制和十六进制向十进制转换都是非常容易的,就是"按权相加". 所谓"权",也即"位权".例如,十进制第1位的位权为100=1,第2位的位权为101=10,第3位的位权为102=100:而二进制第1位的位权为20=1,第2位的位权为21=2,第

C#基础之------进制转换

/************************ File:控制台进制类型转换实现 Time:2014年8月12日 Author:小X ****************************/ 1 using System; 2 using System.Collections.Generic; 3 using System.Text; 4 using System.Threading; //需要用到线程 5 namespace Timer 6 { 7 class Program 8 { 9

C语言学习笔记:15_c语言中的进制操作.c

/* * 15_c语言中的进制操作.c * * Created on: 2015年7月5日 * Author: zhong */ #include <stdio.h> #include <stdlib.h> /** * c语言中的进制表示 * 前面加0b表示二进制 * 加0x表示十六进制 * 数字前加0表示八进制 * * printf按进制打印 * %d %i 以十进制打印 * %o 以八进制打印 * %x 以十六进制打印 * * %p 打印变量地址 * %f 打印小数 * %s

C语言将10进制转为2进制

第一种方法: #include<stdio.h> void dectobin(int n); int main() { int x=0; scanf("%d",&x);//只能正数 dectobin(x); printf("\n"); return 0; } void dectobin(int n) { if(n/2>0) { dectobin(n/2); printf("%d",n%2); } else { print

06 python语言中的进制转换

python语言中的进制转换 1.python语言中支持哪些进制,以及这些进制的表示法2.如何在不同的进制之间进行转换 //py 语言支持4种进制 十进制 0-9 // 123 默认就是 十进制 十六进制 0-9 A-F //0x 0xFF12E 0x 开头的就是 十六进制二进制 //0b 0b11010101 //这里用0B 也是可以的但是业内都是用小写的0b表示 表示二进制 八进制 //0o 0o4324 // 0o 开头的就是 八进制 除了十进制外,其他进制数字前面都是0 转换 主要是十进

【基础】进制转换

1.什么是二进制.八进制.十进制. 十六进制? 我们平常生活中常用的是10进制,就是逢10进1: 二进制:逢二进一                由0.1组成: 八进制:逢八进一                由0-7组成:                                      前面以o开头的数字表示八进制                    在c语言中用%o  十进制:逢十进一                由0-9组成:                        

C语言打印16进制出现0xffffff现象的问题剖析!

今天在博问里面看到一个朋友的问题,大致是在网络程序中,打印出来的16进制数,莫名的出现ffffff.例如,某个byte真是值为0xc9,打印出来确是0xffffffc9.原博问连接如下:http://q.cnblogs.com/q/71073/ 其实类似的问题不是只在网络程序中才会出现的,看示例代码: 1 #include <stdio.h> 2 int main() 3 { 4 char c = 0xc9; 5 printf("A:c = %2x\n",(unsigned

c语言将2进制数转化为10进制数(栈的初始化,进栈,出栈)

1 //c语言描述 将2进制转化为10进制 2 #include <stdio.h> 3 #include <stdlib.h> 4 #include <math.h> 5 #define STACK_INIT_SIZE 20 6 #define //栈满后再分配 7 8 typedef char ElemType; 9 typedef struct 10 { 11 ElemType *base; //栈底 12 ElemType *top; //栈底 13 int s

2 C语言 常量,进制,类型限定 输入输出 运算符 类型转换

常量:#define const 字符串常量 1 8 10 16 进制转换 sizeof关键字 变量 int folat char 类型限定 const volatile register 输入输出 printf scanf 运算符 = + - *  / % += -= *= /= %= ++ -- , 运算符优先级 代码块{} 类型转换 1         C语言中的数据类型 1.1      常量 常量就是在程序中不可变化的量,常量是不可被赋值的. 1.1.1         #define