16进制转char_谈谈进制换算

本文介绍了进制转换的重要性,特别是16进制到二进制的转换。通过累积法和打表法,详细讲解了人类如何进行计算,同时也提到了计算机的处理方式。文章适合没有二进制基础知识的读者,讨论了人类计算技巧,包括计算进制数值的便捷方法,以及程序员需要记住的进制转换表。
摘要由CSDN通过智能技术生成

15f464a483129010427c2bf129af2f00.png
世界上有 10 种人,一种是懂二进制的,另一种是不懂的 ——段子

大学里像咱们要学到这个(虽然我觉得学了也没意义吧),和基础数学数论、基本算法结构有关系,既然这样,不如敞开讲下我之前的见闻。

这篇文章是写给没有太多(二)进制相关知识的人的,不要弄个懂电子的人来看,害怕……

进制换算可以说只是人类里存在的问题,记得蹩脚的罗马数字(就是 II IV 这些加减乘除都用到的大混乱数值[1])吗?它是影响到你的处理能力的。

进制只是一种表示法嘛,数值说实在的还是 加减乘除余(+-*/%)、大小相等性(><, ==)判断,像二进制位运算 (a bitwiseOr b) 就等于抽象的 (a+b) ,机器里一般是补码,这个没学过不讲[2]

下文k表示数位编号(以0始从右数)、a*b表示

equation?tex=a%5Ctimes+b
n**k 表示
equation?tex=n%5Ek 乘方运算。

为啥有这个问题

进制就是位置记数法,因为它的简单性(比如长的数肯定大、进位借位方便)被认作唯一的数值形式[3]
在人类阅读习惯和大端(big endian)字节序里,前面即左端的数位占更大权重,它的“1”会表示更大的值。

与这个相关的数学符号是

equation?tex=%5Cmod%7B%7D
equation?tex=n%5Ek ,以及一个“基数” base (又叫 radix) 值,二进制的基数是 2,每位不大 2 (和
equation?tex=n%5Cmod%7B2%7D 的结果一致)

首先说计算机怎么算,毕竟它的方法死板但接近“表示问题”的本质。

读取到抽象数值(『值』和其表示法没有关系,只提供加乘法、比较的这些操作):

int atoi(char* s) {
    
  int accum = 0;
  for (char c=*s; s!='00'; s++) {
     accum = accum*10+(c-'0'); }
  return accum;
}

然后是输出:

#include <math.h>
char* itoa(int n) {
    
  int size = (int)ceil(log10()); // 算十进制位数,要预先在系统堆分配定长度字符数组,可能不准确。
  char* out = malloc(sizeof(char) * (size+1/*'00'*/)); // 分配 (size+1) 大小的字符(char) 数组
  int i = size-1; // 字符串输出数位号,先 mod(%) 下来的是低位所以从右数。
  while (n != 0) {
     out[i] = '0'+(n & 10); n /= 10; i -= 1; } // 重复若n不是0,右输出(n取余以10);n=n除10。
}

上面的代码是给相关专业的人看的(也用到了重赋值子程序参数的不良写法 入"C"随俗),也不太好给所有人解释,从0编号的数组的末引数是 (size -1) 以及C字符串是以 '00' 结尾的char数组/内存片指针 这样的细节。

而且上面俩都不处理负数,知道数学弄啥有『定义域』『验证变形/组合有效性』吗?它解决的就是程序的运行时错误。itoa程序在 n<0的时候会陷入无限循环,从0前递减永远到不了0[4]

毕竟咱也不是弄算法可视化的,输出循环变量变动表什么的就免了。(要实例干货的直接翻下一节)

equation?tex=%5CSigma_i%5E%7Blog_%7B10%7Dn%7D+%28%5Cfrac%7Bn%7D%7Bi%2A10%5E%7Bi%2B1%7D%7D%5Cmod%7B10%7D%29%2A10%5Ei

公式不好看吧(也不太严谨,准确说是吓唬你们的)?(0~n的位长度)去求和,【i】量 位值=基数乘方i;(n/位值 取余以 基数)乘位值。其中,常数 基数=10。这样的意思。

好吧,其实真的公式是这个:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值