资讯动态

3.数制和编码知识点总结

发布时间:2026/10/8 7:29:19 来源:尧图企业网站定制
C 数制和编码知识点总结一、数制和编码1二进制与编码1. 二进制基础计算机中存储的数据都是二进制形式0和1C中二进制表示以0b或0B开头如0b1010二进制的计数规则逢二进一借一当二2. 二进制与十进制互转二进制转十进制将二进制数按位权展开后求和。例(1001)₂ 1×2³ 0×2² 0×2¹ 1×2⁰ 8001 9带小数(1001.1111)₂ 1×2³0×2²0×2¹1×2⁰1×2⁻¹1×2⁻²1×2⁻³0×2⁻⁴ 9.875十进制转二进制整数部分除以2取余除到商是0为止逆序输出余数。例89 → 89/244余1 → 44/222余0 → 22/211余0 → 11/25余1 → 5/22余1 → 2/21余0 → 1/20余1结果(89)₁₀ (1011001)₂小数部分乘2取整法顺序输出。例0.125 ×2 0.25 → 取整00.25 ×2 0.5 → 取整00.5 ×2 1.0 → 取整1到0结束结果(89.125)₁₀ (1011001.001)₂3. 二进制数的编码表示原码、反码、补码机器数一个数在计算机中的表示形式。最高位为符号位0正1负其余为数值位。真值机器数所对应的原来的数值。原码数符0正1负 数值的二进制形式。例28 → 原码 00011100-28 → 原码 100111000 → 原码 00000000反码正数反码 原码负数符号位不变数值位各位取反0变11变0例-28 → 原码 10011100 → 反码 11100011注意0在反码中有两种表示000000000-011111111补码正数补码 原码负数符号位不变数值位各位取反再1即反码1例-28 → 原码 10011100 → 反码 11100011 → 补码 11100100注意0在补码中只有一种表示00000000补码的补码 原码4. 负数补码转十进制方法一求绝对值法补码 → 按位取反 → 末位加1 → 得绝对值原码 → 转十进制加负号例101010118位补码→ 取反01010100→ 1 01010101 85 → 结果-85方法二权值展开法最高位权值为-2⁷ -128其余位权值与正数相同例10101011 1×(-128) 0×64 1×32 0×16 1×8 0×4 1×2 1×1 -1283208021 -855. 课件例题与真题【真题1】2023年6月 判断题题目计算机中存储的数据都是二进制形式。因此在使用C语言编写程序时将所有十进制数改写为相同数值的二进制数会使得程序运行效率更高。答案错误解析编译器在编译阶段会自动将十进制数值转换为二进制机器码程序员无需手动转换。无论写十进制还是二进制字面量最终机器码相同不会提升运行效率。【真题2】2023年9月 选择题题目下列关于负数的原码、反码、补码的描述中正确的是 A. 原码和反码互为按位取反符号位除外补码为反码加1B. 原码和反码互为按位取反符号位除外补码为原码加1C. 反码和补码互为按位取反符号位除外原码为反码加1D. 补码和原码互为按位取反符号位除外反码为补码加1答案A解析正数原码反码补码负数反码原码符号位不变数值位取反补码反码1。二、数制和编码2八进制与十六进制1. 八进制和十六进制基础C中各进制表示形式进制表示数字进位原则C表示形式十进制0~9逢十进一默认二进制0~1逢二进一0b/0B开头八进制0~7逢八进一0开头十六进制0~9 A~F逢十六进一0x/0X开头八进制与二进制一位八进制对应三位二进制000~111十六进制与二进制一位十六进制对应四位二进制0000~11112. 八进制/十六进制与十进制互转八进制转十进制按位权8展开后求和例(1756.2)₈ 1×8³7×8²5×8¹6×8⁰2×8⁻¹ 5124484060.25 1006.25十六进制转十进制按位权16展开后求和例(6F.2)₁₆ 6×16¹15×16⁰2×16⁻¹ 96150.125 111.125十进制转八进制整数部分除以8取余逆序输出小数部分乘8取整顺序输出例(78.625)₁₀ → 整数78/89余6 → 9/81余1 → 1/80余1 → 逆序116小数0.625×85.0 → 取整5 → 结果116.5结果(78.625)₁₀ (116.5)₈十进制转十六进制整数部分除以16取余逆序输出余数1015用AF表示小数部分乘16取整顺序输出例(78.625)₁₀ → 整数78/164余14(E) → 4/160余4 → 逆序4E小数0.625×1610.0 → 取整10(A) → 结果4E.A结果(78.625)₁₀ (4E.A)₁₆3. 任意进制间转换方法以十进制为媒介可以实现任意进制的转化。例如二进制转十六进制先转十进制再转十六进制。4. 课件例题与真题【真题1】2023年6月 选择题题目下列关于进制的叙述不正确的是 A. 正整数的二进制表示中只会出现0和1B. 10不是2的整数次幂所以十进制数无法转换为二进制数C. 从二进制转换为八进制时可以很方便地由低到高将每3位二进制位转换为对应的一位八进制位D. 从二进制转换为十六进制时可以很方便地由低到高将每4位二进制位转换为对应的一位十六进制位答案B解析任何十进制整数都可以转换为二进制数与10是否为2的整数次幂无关。【真题2】2023年9月 选择题题目下列关于进制的叙述正确的是 A. 只有十进制和二进制能够用来表示小数八进制和十六进制不可以B. 常用的进制包括二进制、八进制、十进制、十六进制其他进制在日常生活中很少使用C. 对任意正整数其二进制表示不会比它的十进制表示更短D. 正整数的八进制表示中每一位可能出现的最大数字是8答案C解析二进制位数一定不少于十进制位数因为基数更小所以C正确。A错八进制十六进制也能表示小数B错还有其他进制D错八进制最大数字是7。三、C进制转换代码实现1. 二进制转十进制#includebits/stdc.husingnamespacestd;intmain(){intb0,c0;string a;// 二进制正整数cina;intla.size();for(inti0;il;i){cc*2(a[i]-0);}coutc;return0;}2. 十进制转二进制#includebits/stdc.husingnamespacestd;intmain(){ints[1000],a,i1;cina;while(a){s[i]a%2;// 保存余数aa/2;// 除以2}for(intji;j1;j--){couts[j];}return0;}3. 十进制转十六进制#includebits/stdc.husingnamespacestd;intmain(){ints[1000],a,i1;cina;while(a){s[i]a%16;// 保存余数aa/16;// 除以16}while(i1){if(s[i]10)couts[i--];elsecout(char)(s[i--]-10A);}return0;}4. 十进制转任意进制通用模板#includebits/stdc.husingnamespacestd;intmain(){ints[1000],a,n,i1;cinan;// a是要转换的数n是目标进制while(a){s[i]a%n;// 保存余数aa/n;// 除以n}while(i1){if(s[i]10)couts[i--];elsecout(char)(s[i--]-10A);}return0;}四、进制判断GESP 2023年9月 编程真题题目描述N进制数指的是逢N进一的计数制。现在有N个数请你分别判断它们是否可能是二进制、八进制、十进制、十六进制。例如15A6F就只可能是十六进制而1011则是四种进制皆有可能。输入第一行为整数N接下来N行每行一个字符串由数字和大写字母组成不以0开头。输出N行每行4个数0或1分别表示是否可能是二进制、八进制、十进制、十六进制。样例输入2 15A6F 1011样例输出0 0 0 1 1 1 1 1解题思路核心思路找出每个字符串中的最大字符判断该最大字符是否在对应进制的合法字符范围内。二进制字符只能是0~1八进制字符只能是0~7十进制字符只能是0~9十六进制字符只能是0~9、A~F关键字符比较 —— 如果字符串中最大字符对应进制的最大允许字符则该进制可能。完整代码#includeiostreamusingnamespacestd;intmain(){intn;cinn;string s;for(inti0;in;i){cins;charmaxc0;for(intj0;js.length();j){if(maxcs[j])maxcs[j];}cout(maxc1) ;cout(maxc7) ;cout(maxc9) ;cout(maxcF)endl;}return0;}五、配套GESP三级洛谷题目推荐洛谷题目编号题目名称考点难度B3849进制转换样题十进制转R进制2R36基础B3868进制判断202309真题判断字符串是否可能是某进制基础B3869进制转换202309四级K进制转十进制基础B2143进制转换递归实现十进制转任意进制基础P1143进制转换任意进制间转换经典题进阶B4358奇偶校验202506位运算基础应用进阶说明以上题目均可在洛谷luogu.com.cn搜索编号找到。B3849和B3868与本课件内容直接对应建议优先练习。B2143是洛谷入门题库中的经典进制转换题适合巩固递归思想。P1143难度稍高适合学有余力的同学拔高。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑