嵌入式技术
进制之间的转换
其他进制转换为二进制
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函数快)
图解:
审核编辑:汤梓红
全部0条评论
快来发表一下你的评论吧 !