首页 > 其他分享 >为什么C语言喜欢用进制表示数字?直接十进制不是更好吗?

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

时间:2022-09-29 11:35:32浏览次数:61  
标签:进制 16 二进制 32 C语言 64 内存 十进制

很多没有学习过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一样

标签:进制,16,二进制,32,C语言,64,内存,十进制
From: https://www.cnblogs.com/guanchaoguo/p/16740868.html

相关文章

  • C语言每日一题——第二天
    第二天题目小明在完成给朋友统计生日的代码之后,想起来他好像看到过有一个数学公式是用于计算某年某月某日是星期几。当然了,他不会无聊到用这个程序计算超过700年前的星期......
  • 【C语言_7】运算符!看这篇就够了
    一、算术运算符1.加法运算符+#include<stdio.h>intmain(){inta=2;intb=3;printf("a+b=%d\n",a+b);return0;}运行结果:2.减法运算符-#include<stdio.h>intmain()......
  • 【C语言】Visual Studio 2022开发环境搭建
    1.下载VisualStudio2022VisualStudio的官方网站:​​https://visualstudio.microsoft.com/​​点击下载VisualStudio社区版Community2.安装VisualStudio2022双击Visual......
  • C语言 测标准体重
    #include<stdio.h>intmain(){ doubleh,w; chara; printf("请输入性别(男性输入m,女性输入f):"); scanf("%c",&a); printf("输入身高(cm)"); scanf("%lf",&h); if(a=='m') ......
  • C语言入门学习——函数的使用
    函数的概述C程序是由函数组成的,我们写的代码都是由主函数main()开始执行的。函数是C程序的基本模块,是用于完成特定任务的程序代码单元。从函数定义的角度看,函数可分为系......
  • C语言也能做界面:踏上GTK+学习之旅
    ​​00、背上行囊1——程序员学习之道​​​​01、背上行囊2——为什么要学习GTK​​​​02、背上行囊3——​​​​GUI概述​​​​03、背上行囊4——GTK简介​​​​04、......
  • 初学C语言笔记220928
    void*p  强制类型转换成int型指针,再解引用voidqsort((void*base,//指向要排序的数组的第一个元素的指针size_tnitems,,//数组中的元素个数......
  • C语言第19天,标识符作用域和预处理指令
    一、标识符作用域1.代码块作用域{//代码块Axxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx}{//代码块Bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx}源代码中,被花括号包括的代码,形成一个......
  • 实验1 C语言开发环境使用和数据类型、运算符、表达式
    #include<iostream>#include<string>#include<vector>intmain(){usingnamespacestd;strings1;//创建一个string对象strings2{"cplusplus"};//......
  • Python字节流,字符串,16进制相互转换
    python版本:Python3.81.字节流转成字符串2.字符串变字节流3.16进制字节流变成字节流4.16进制字符串变成字符串字节流 ......