C语言进制之间的转换

嵌入式技术

1368人已加入

描述

进制之间的转换

其他进制转换为二进制

1、八转二:123.6,首先,将每一位数字,一分为三。1=001  2=010  3=011    0.6=110

然后合起来:0010 1001 1.110=1010 011.11(可将整数高位的零省略,小数低位的零不写)

2、十转二  方法一:整数除R取余法,小数乘E取整法:

如:14.875:整数部分除2取余,小数部分乘2取整

整数 14/2  商7余0  7/2 商3余1  3/2 商1余1  1/2  余0      除到商数零为止 

小数 875 * 2=1.750  取1  . 075 * 2=1.50 取1  0.5 * 2=1.0  取1  乘到所需要的精度或者积为零为止 

然后  :  整数从高位(后面)写,小数从低位(前面)写。

14.875十进制转为二进制等于  1110.111

  十转二  方法二:如  46 :他最大只能分配 32位字节,46-32=14,最大3

只能分配8个字节,14-8=6,最大只能分配4个字节,4-2=2。到此结束

它们分别是  2^5  2^3  2^2 2^1  然后分别在 第六位上填个1,第四位上填个1,第三位上填个1,第二位上填1  ,其他位均是零  :46 十转二 101110

3、十六转二:  84.cf  一分位为四,规则方法与八转二相同,  8=1000  4=0100  12=1100  16=1111

合起来:1000 0100 0100.1100 1111

进制转换

其他进制转八进制

1、二转八 :规则:整数部分 从低位到高位,每三位为一组,最高位不足三位时高位补零,小数从低位到高位,每三位一组,最低位不足三位时低位补零。

1011 1100 011.11=001 011 110 011.110

              =1  3  6  3 . 6

2、十进转八:(规则和十转二一致)除R取余法,乘E取整法

25.35 :整数  25/8  商3  余1  3/8  余3  除到商数零为止

      小数  0.35

2、十进转八:(规则和十转二一致)除R取余法,乘E取整法25.35 :整数  25/8  商3  余1  3/8  余3  除到商数零为止            小数  0.35 * 8=2.80  取2  0.8 * 8=6.4  取6  0.4 * 8=3.2 取3  0.2 * 8=1.6 取1 乘到所需要的精度或者积为零为止。25.35十转八31.2331

3、十六转八  一般的方法是先其他进制做为媒介,先转为其他进制再从其他进制转为八进制。

如 84.cf  先转为二进制:8=1000  4=0100 12=1100  16=1111  总:1000 0100.1100 1111

(按照二转八规则)010 000 100.110 011 110= 204.636

其他进制转为十进制

1、十六转十(5F):5 * 16^1+15 * 16^0=  95

2、八转十  (123.4):1 * 8^2+2 * 8^1+3 * 8^0+4 * 8^-1= 83.5

3、二转十  (1101.11):1 * 2^3+1* 2^2+0 * 2^1+1 * 2^0+1 * 2^ -1+1 * 2^-2=13.75

其他进制转为十六进制

1、二转十六,规则同二转八一样,只不过是四合一:

1010 1011 110.011=0101 0101 1110.0110=55E.6

2、八进制转十六进制,只能是用其他进制做为媒介,转为其他进之后再转为十六进制

3、十转十六,方法一:用其他进制做媒介 先转为其他进制再转为十六进制。

方法二 :用整数除16取余法,小数用乘16取整法。

运算符

优先级运算符含义说明结合方向

进制转换

说明:同一优先级时,运算方向按照结合方向决定。

自增(自减)i++与++i的不同

i++表示先使用i的值之后再+1

++i表示先+1

从上述表中可以大致归纳出各类运算符的优先级:

初等运算符(  )[  ] ->  .

单目运算符

算述运算符(先乘除,后加减)

关系运算符

逻辑运算符(不包括!)

条件运算符

逗号符

进制转换

printf函数:

format -- 是格式控制字符串,其中两种类型的对象:普通字符和转换说明(加%那种)  。在输出时,普通字符将原样不动地复制到标准输出,转换说明并不直接输出而是用于控制 printf 中参数的转换和打印。每个转换说明都由一个百分号字符(%)开始,以转换说明结束,从而说明输出数据的类型、宽度、精度等

函数原形:%[flags][width][.precision][length]specifier,即:%[标志][最小宽度][.精度][类型长度]说明符    (其中如果加转换说明时,%和 说明符(格式符)不能省略,其他均可)

函数表示在format的控制下,将其参数进行格式化,然后再输出打印出来。

如果函数执行成功,则返回打印字符的数量,失败则返回负数。

printf 函数的返回值为其输出字符串常量的字符数(注意字符数与字数的区别),注意计数针对所有的打印字符,包括空格和不可见的换行字符(不包括字符串的空字符)。

printf函数输出方向是自右到左的。图解:

进制转换

进制转换

scanf函数

标准输入流stdin:它是从标准输入设备(键盘)获取数据,程序中的变量通过流提取符从流中提取数据,注意:只有在输入完数据再按回车键后,该行数据才被送入键盘缓存区(sell),形成输入流,提取运算符才能从中提取数据。需要注意保证从流中读取数据能正常运行

scanf函数是从stdin中读取内存的子程序。并将数据保存在变量的地址中。

scanf函数返回成功读入的数据项数。函数返回值为int型。

如果a和b都被成功读入,那么scanf的返回值就是2;

如果只有a被成功读入,返回值为1

如果a和b都未被成功读入,返回值为0;

如果遇到错误或遇到end of file,返回值为EOF。end of file为Ctrl+z 或者Ctrl+d。

函数原形:int scanf (const char * restrict format,...);(存储顺序由编译器决定)

**注意:

(1)在高版本的 Visual Studio 编译器中,scanf 被认为是不安全的,被弃用,应当使用scanf_s代替 scanf。

(2) 对于字符串数组或字符串指针变量,由于数组名可以转换为数组和指针变量名本身就是地址,因此使用scanf()函数时,不需要在它们前面加上"&"操作符。

(3) 可以在格式化字符串中的"%"各格式化规定符之间加入一个整数,表示任何读操作中的最大位数。

(4) scanf函数中没有类似printf的精度控制。如:scanf("%5.2f",&a); 是非法的。不能企图用此语句输入小数为2位的实数。

(5) scanf中要求给出变量地址,如给出变量名则会出错如 scanf("%d",a);是非法的,应改为scanf("%d",&a);才是合法的。

(6) 在输入多个数值数据时,若格式控制串中没有非格式字符作输入数据之间的间隔,则可用空格,TAB或回车作间隔。C编译在碰到空格,TAB,回车或非法数据(如对“%d”输入“12A”时,A即为非法数据)时即认为该数据结束。(7) 在输入字符数据(%c)时,若格式控制串中无非格式字符,则认为所有输入的字符均为有效字符。(scanf有一个明显的优点,速度比cin函数快)

图解:

进制转换

进制转换

 



  审核编辑:汤梓红

 

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分