关于“一个字等于多少字节?“的问题解答

网上有人说这个问法不严谨,我觉得严格说确实是这样,但是我个人觉得不能这样说!

举个例子,这个问题就好比你上初中的时候那些证明题很多其实是很不严谨的,但是限于知识体系,到高中你会发现好像不是那么一回事,到了大学你又会发现另外新的东西!但是你能回去说初中老师教的都是错的吗?我觉得不能吧!只能说你看待问题的角度以及一个系统的宏观视角的更深入了,看待问题更明白了!

回到这个问题,一个字等于多少字节?

首先一个字节等于八位这是毋庸置疑的,因为存储系统逻辑地址的编址便是以字节为单位进行编址的,计算机运算二进制这是人所共知的事,也就是8个二进制位等于1个字节大小

这里可能大部分人会回答,一个字等于两个字节,你能说这有错误吗?我觉得不能

为什么我说不能?

首先我先分析一下说这句话错误的原因是什么?

关键字:计算机系统

现在市场上基本上大部分都是intel系列的cpu,intel推出的x86(32位)架构以及x64(64),这里谈到的64位和32位就是64个二进制位和32个二进制位,这个是CPU产商也就是intel等公司生成CPU时决定的,64位代表他的CPU总线以及寄存器的数据宽度,64位即8个字节大小,同理32位也是一样的道理,

在计算机系统里,字长是CPU的主要技术指标之一,指的是CPU一次能并行处理的二进制位数,所以这里这里的字大小会根据cpu架构的不同而不同,即上述说的32位和64位都可以表示位一个字长大小,这表征的是一个系统,cpu处理数据的能力

所以,从计算机系统视角来看,等于两个字节显然是错误的。

再来分析这句话正确的原因?

关键字:计算机语言

c语言
有人可能会很疑惑在widnows下,WORDDWORD永远表示2字节和4字节大小,这里我要强调一下,你在进行的是windows编程,也就是你一定导入了Windows.h头文件,不然你不可能使用上WORDDWORD
在这里插入图片描述
实际上这里WORDDWORD的只是Windows.h头文件里的使用typedef一个别名定义,因为在Windows下很多系统API都是使用这两个定义的
在这里插入图片描述
DWORD真正的原型是unsigned longWORD则为unsigned short这里首先看清了WORD和DWORD的真面目,其次我要强调这个里的WORD字大小和计算机系统里的字长大小所表征的不是同一个东西!这里仅仅是微软自己定义的一个东西而已,你完成可以看到有WORD的地方,直接替换成unsigned short,没有任何疑问,也不可能有任何错误!

这里顺便看一下c语言下几种数据类型大小
在这里插入图片描述
我这是在微软的msvc编译环境下展示的大小,即short代表2个字节,int代表4字节,long代表4字节, long long代表8个字节,不管是32位还是64位都是同样的大小。

然而在gcc编译后,long类型在32位环境下为4字节大小,在64位环境下为8字节大小。
在这里插入图片描述
总结,针对c语言类型,这里没有字大小的概念,只有short类型,唯一出现的在微软的msvc编译环境下的WORD是微软自己定义的一个别名,实际为unsigned short类型。

汇编语言

这里可能你就看到很多WORD了

  1. 伪指令
    在这里插入图片描述
DB 定义字节变量
DW 定义字变量,2字节大小
DD 定义4字节变量
DQ 定义8字节变量
DT 定义10字节变量
  1. 汇编指令中
    在这里插入图片描述
    这里就是真正的所谓的大家经常说到的一个字等于两个字节大小的地方了,在intel汇编中是这样。
BYTE(字节) 1字节
WORD(字) 2字节
DWORD(双字) 4字节
QWORD(四字)8字节
TBYTE(十字节)10字节

下图是我在arm指令的书籍上面看到的描述,字数据大小,这里所谓的字大小就是这本书针对的ARM32位系统说的,实际上也就是4个字节大小的数据。
在这里插入图片描述

最后总结

关于一个字等于多少字节这个问题?是需要面向对象回答的,如果对于计算机系统而言,字大小也就是所谓的字长是表征计算机系统处理问题的能力,通常等于cpu总线或者寄存器的宽度,即现代计算的32位或者64位;在windows下编程,而且使用的微软的msvc编译环境,微软定义的WORD本质为unsigned short类型,只是一个别名;如果在汇编语言里面,一个字大小确实等于2个字节大小,DW则为数据定义伪指令,定义为一个字大小。

猜你喜欢

转载自blog.csdn.net/weixin_43833642/article/details/107932383