原码编码(附详细计算步骤)

liuzw 13 0

「原码编码」的核心就三句话,剩下的都是细节。先把三句话记住,后面所有的展开都围着它转,就不会乱。

把基础理清

进制转换:十进制转N进制用除N取余逆序法,N进制转十进制用按权展开求和。二进制↔十六进制每4位一组,二进制↔八进制每3位一组。计算机用二进制,十六进制是二进制的简写(4位二进制=1位十六进制)。生产环境要考虑异常、并发、性能,不能只测正常流程。光看不动手永远学不透,写个小demo跑一遍胜过读十篇文章。

开始正式操作

原码反码补码:正数三者相同,负数原码符号位1、反码数值位取反、补码反码+1。计算机用补码存储整数(统一加减法、0唯一)。8位补码范围-128到127,32位int范围-2^31到2^31-1。安全三件套:防SQL注入、防XSS、防CSRF,缺一不可。错误信息要看完整,别只看第一行,真正的根因往往在堆栈深处。

实算一遍

先理解概念。原码编码属于开发基础知识,搞懂底层原理(编码规则、算法逻辑、协议规范)比记API更重要。原理通了,换语言换框架都能快速上手。日志要记关键节点和异常,出问题排查全靠它。边界情况要专门测:空值、超长、特殊字符、负数、并发。

具体怎么做

别被吓住,真正要做的就这几步:

  1. 第一步:十进制转N进制:除N取余逆序法,连续除N取余数逆序排列
  2. 第二步:N进制转十进制:按权展开求和,每位×N的位次方相加
  3. 第三步:二进制↔十六进制:每4位一组互转
  4. 第四步:二进制↔八进制:每3位一组互转
  5. 第五步:用十进制25验证:=11001(二进制)=31(八进制)=19(十六进制)

几个要注意的地方

把这几点贴在屏幕上盯着,算的时候随时对:

  • 十六进制A-F对应10-15,编程常用0x前缀
  • 八进制用0o前缀(Python3),旧的0前缀易和十进制混淆
  • 颜色值#FFFFFF就是十六进制,每两位代表RGB一个通道
  • 十进制小数转N进制用乘N取整法,可能无限循环

今天讲的这些,你自己跑一遍流程,比我再说十遍都管用。开始吧。

边界情况要专门测:空值、超长、特殊字符、负数、并发。生产环境要考虑异常、并发、性能,不能只测正常流程。错误信息要看完整,别只看第一行,真正的根因往往在堆栈深处。日志要记关键节点和异常,出问题排查全靠它。光看不动手永远学不透,写个小demo跑一遍胜过读十篇文章。原理比API重要,原理通了换语言换框架都能快速上手。写完代码用边界案例测一遍,比读十遍代码都管用。多写多测自然熟练,开发就是踩坑填坑的循环。

常见问题

【原码编码是什么?】属于开发基础知识范畴,是程序员日常会用到的概念或工具。理解原理(编码/算法/协议)比记API重要,原理通了换语言框架都能快速上手。

【为什么计算机用补码?】补码把减法变加法(统一运算)、0的表示唯一(原码有+0和-0)、范围多一个最小负数。8位补码范围-128到127(原码-127到127)。硬件实现简单,运算统一。

【十进制怎么转二进制?】除2取余逆序法:25÷2=12余1...直到商0,余数逆序读11001。二进制转十进制按权展开:11001=2^4+2^3+2^0=25。十六进制每4位二进制一组互转。

【原码反码补码什么区别?】正数三者相同。负数:原码符号位1数值位不变、反码数值位取反、补码反码+1。计算机用补码存储(统一加减法、0的表示唯一)。8位补码范围-128到127。

标签: 原码 数码开发

抱歉,评论功能暂时关闭!