C语言:(第一章)数制

一:数制(计数的规则)

*定义:指用一组固定的符号和统一的规则表示数值的方法

*进制:逢几进一(N进制就是指逢N进一)在计数的过程中采用进位的方法称为进位计数制,简称进位制;在进位数制中,表示数的符号在不同的位置上所代表的值是不同的

        -数码:数制中表示基本数制大小的不同数字符号

        -基数:数制中所使用的数码的个数

        -位权:数值中某一位上的数所表示的数值的大小(所处位置的价值)

*R进制数:

        基数:R

​         数码:R个(0~R-1)

​         位权:R的幂

*C语言规定八进制前要加0(注意是零不是字母O),十六进制前要加0x或0X,十进制前什么都不加(计算机只识别二进制)

*在汇编中,数字后加字母B表示二进制数,加字母O表示八进制数,加字母D表示十进制数,加字母H表示十六进制数

​         例子:1011B为二进制数1011,也记为(1011)₂

*预备知识

        小数除以大数,则商为零,余数是小数本身

                例子:1/2 = 0 余数1

*其它进制转化为十进数:

        按权展开,对多项式进行算术求和,结果用十进制的位置表示法给出

​         eg:(1101.1001)B=( ?)D

​                (1101.1001)B=12³+12²+02¹+12º+12-¹+02-²+0*2-³+...

*十进制转成r进制

        转换原则:若两数相等,则它们的整数部分和小数部分分别相等

        转换方法:对整数部分和小数部分分别转换,整数部分的转换采用“除基取余”法,小数部分的转换采用“乘积取整”法

                方法(整数部分除基取余):除r取余,直至商为0,余数倒序排列

​                       (小数部分乘积取整):用目标数制的基数(R)乘十进制小数,第一次相乘的结果的整数部分为目的数的最高位,将其小数部分再乘以该基数,重复该过程,直到乘积的小数部分为0或满足要求的精度为止,然后顺序排列每次乘积的整数部分

*二进制和八进制的转化

        1:二进制到八进制

                方法一:(分组对应转化:从右向左,三位一段,分别转化,不够三位的补零)以小数点为界,将二进制的整数部分从低位开始,小数部分从高位开始,每三位分成一组,最后一组不足三位时,分别在整数的最高位前面和小数的最低位后面补0凑齐三位。然后将每组的三位二进制数转化成对应的八进制数字符号

                方法二:将待转化数转化为十进制数,然后将得到的十进制数转化为目标进制数

                例子:(0101110)₂→(000,101,110)₂→(0 5 6)下标8

        2:八进制到二进制

                方法:(按位对应转化:将每一个八进制转化为三个二进制位)将八进制数中的每一位数字符号表示成对应的三位二进制数,去掉整数部分首部和小数部分尾部的0

例子:(27)下标8→(010,111)

*二进制与十六进制的转换

        1:二进制到十六进制

                方法一:(分组对应转化:从右向左,四位一段,分别转化,不够四位的补零)以小数点为界,将二进制的整数部分从低位开始,小数部分从高位开始,每四位分成一组,最后一组不足四位时,分别在整数的最高位前面和小数的最低位后面补0凑齐四位,然后将每组的四位二进制数转化成对应的十六进制数字符号

               方法二:将待转化数转化为十进制数,然后将得到的十进制数转化为目标进制数

例子:(0101110)₂→(0010,1110)₂→(2 ,E )下标16

        2:十六进制到二进制

                方法:(按位对应转化:将每一个十六进制转化为四个二进制位)将十六进制数中的每一位数字符号表示成对应的四位二进制数,去掉整数部分首部和小数部分尾部的0

                例子:(2E)下标16→(0010,1110)²*十六进制与八进制相互转化

                不存在十六进制与八进制的直接相互转化,都是以二进制为中间进制来进行转化的

*8位二进制所代表的十进制示意图

二进制                 十进制

-0000 0000              -- 0

-0000 0001              -- 1

-......... ........ ..................

-0111 1111            -- 127

-1000 0000         -- -128

-1000 0001         -- -127

-1000 0010         -- -126

-......... ......... ................

-1111 1111              -- -1

/*
时间:2022/03/18/10:16
目的:测试100的进制转化
*/
#include 
int main(void)
{
    int i = 100;
​
    printf("dec = %d octal = %o  hex = %x\n",i,i,i);
    printf("dec = %d octal = %#o  hex = %#x\n",i,i,i);
    return 0;
}
/*
在vs2019中的输出结果
~~~~~~~~~~~~~~~~~~~~~~~~~~
dec = 100 octal = 144  hex = 64
dec = 100 octal = 0144  hex = 0x64  //十进制前什么都不加
~~~~~~~~~~~~~~~~~~~~~~~~~~
总结:。。。
*/

你可能感兴趣的:(C语言,c语言)