补补算术基础:编程中的进制问题
关于二进制、八进制、十六进制以及它们与十进制的关系和转换。详细地请参考下面的文章(写得还不错)
http://www.d2school.com/bcyl/bhcpp/newls/ls06.htm
在我们编程过程中,用得最多的是十进制,然后是十六进制,他们的转换在c#中主要用两个方法
Convet.ToString() 和 Convert.ToInt32()
我总结几点:(以下黑体,斜体字是我的总结摘要)
关于这一点,首先因为进制越大,表示一个数字就越短。计算机只认识二进制,但二进制我们不好理解,它太长,而且很不直观。八进制和十六进制因为都是2的整数幂(八进制是2^3,而十六进制是2^4),所以他们本身很好转换为二进制。
但是为什么我们通常用的又不是八进制和十六进制,而是十进制呢?这又是一个问题。
总结来说,这些进制转换为十进制的算法类似如下
八进制1507换算成十进制。
第0位 7 * 80 = 7
第1位 0 * 81 = 0
第2位 5 * 82 = 320
第3位 1 * 83 = 512 +
--------------------------
839(十进制)
就是说把这个数的不同位的值乘上一个与当前进制有关的权数。第0位就乘以进制的0次方,第1位就乘以进制的1次方,以此类推。
反过来,要把十进制转换为其他的进制,算法大致如下
将商继续除以对应的进制(例如2,8,16),直到商为0。最后将所有余数倒序排列,得到数就是转换结果。
例如要把十进制中的6转换为2进制,按照下面的方式运算,然后将余数倒过来,就是110.
|
还有一个关键问题,如何在编码中表示一个八进制或十六进制呢?例如给你一个数字:123。你怎么知道是八进制,还是十六进制,还是十进制呢?
为了以示区分,八进制要加上一个0(零)的前缀,例如123应该书写为0123;而十六进制要加上一个0x的前缀,例如123应该书写为0x123
关于转义字符的问题,一般忽略不考虑
原码:一个整数,按照绝对值大小转换成的二进制数,称为原码
比如 00000000 00000000 00000000 00000101 是 5的 原码。
反码:将二进制数按位取反,所得的新二进制数称为原二进制数的反码。
取反操作指:原为1,得0;原为0,得1。(1变0; 0变1)
比如:将00000000 00000000 00000000 00000101每一位取反,得11111111 11111111 11111111 11111010。
称:11111111 11111111 11111111 11111010 是 00000000 00000000 00000000 00000101 的反码。
反码是相互的,所以也可称:
11111111 11111111 11111111 11111010 和 00000000 00000000 00000000 00000101 互为反码。
补码:反码加1称为补码。
也就是说,要得到一个数的补码,先得到反码,然后将反码加上1,所得数称为补码。
比如:00000000 00000000 00000000 00000101 的反码是:11111111 11111111 11111111 11111010。
那么,补码为:
11111111 11111111 11111111 11111010 + 1 = 11111111 11111111 11111111 11111011
所以,-5 在计算机中表达为:11111111 11111111 11111111 11111011。转换为十六进制:0xFFFFFFFB。
从本质上说,只有十进制有正负之分,其他进制都没有。那么如果要表示负数怎么办呢?就是先用二进制取得原码,然后取反码,然后取补码。然后再根据情况转换为其他进制。
那么还有一个问题,就是如何表示小数?
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人