为什么C语言喜欢用进制表示数字?直接十进制不是更好吗?

很多没有学习过c的开发都会有这个疑惑?难道是单纯的为了装逼吗?

背景

内存需要自己分配
*   C 语言很苦逼,必须自己管理内存。
*   自己申请、 申请释放、
*   还要自己规划整个内存布局 明确知道这申请内存地址在内存中的位置
计算机数据单位
*  内存都是最小单位都是 字节 byte
*  CPU 最小的单位是word 也就字长 有16位 32位 64位

计算机只认识二进制单位

  • 全部需要转为二进制执行
  • 数字-> 内存 -> CPU

假设都用十进制表示数字会有什么问题

  • 10进制首先需要转为二进制
  • 操作内存
    • 十进制转为 转为 byte
    • 申请内存: 需要分配地址时候需要找到起始位置 ,结束位置
    • 然后将10进制转为二进制 一个bit一个bit的数
    • 然后在转回来到10进制 就问累不累
    • 释放内存:上面操作再做一次
如果全部二进制表示 就没那么多转换的事情了

二进制不利于书写

*  一个64bit的数字 64/2=32 32个占位符号
* 即使4位缩进 32/4 = 8

八进制表示

  *  一个64bit的数字 64/3=21.2 22个占位符号
  *  即使4位缩进 22/4 = 6 

16 进制表示

  *  一个64bit的数字 64/4 =16 16个占位符号
  *  即使4位缩进 16/4 = 4 

32 进制表示

  *  一个64bit的数字 64/5 =12.8 13个占位符号
  *  即使4位缩进 13/4 = 5 

结论

  • 不是C语言喜欢 使用16进制表示数字是内存分配的需要
  • 16个占位付符号是最近节省位置的一种写法

便于内存管理

  • 例如 0xDEADDEAD 0xDEADDEAC
  • 肉眼看出来 最后一个16位地址不同
  • 对于内存管理意义重大

便于CPU的操作

  • cpu 一般是word字长 32位DWORD 也就是32位 64为字长是64位
  • 读取16的倍数 一次读取16进制的 2位或者 4位

便于寄存器的操作

  • 寄存器最下单位bit 只能按照位读取 16位寄存器 32位寄存器 64位寄存器
  • 16位集群一次就装配完毕 32地位就直接读取了 同理64一样
posted @ 2022-09-29 11:24  vx_guanchaoguo0  阅读(82)  评论(0编辑  收藏  举报