首页 > 编程知识 正文

字与字节的区别是什么,字节与字的区别与联系

时间:2023-05-04 01:57:56 阅读:222665 作者:2119

作者:Acceyuriko

   链接:https://www.zhihu.com/question/24346126/answer/27486632


   字节是byte包括8个二进制位       
   字是word 长度与架构有关,如mips包括32个二进制位        
   一个字就是4个字节       
   它们的区别就是长度不一样。       
   内存中是按字节寻值。
   因此是每byte也就是每8位存一个数值。       
   jldgq想取一个word出来的时候,就是连续取了4个byte出来,然后拼成一个word       
   xx位机的xx位是指字长。
   这个字和word不一样,是指这种CPU一次能运算的数据长度,
   32位机就是一次运算32个二进制位,64位机就是一次运算64个二进制位       
   总之,两者仅仅长度不同。
   ------------------------------------------------------------------------------
   字的定义是这样,对于某种特定的计算机设计而言,字是用于表示其自然的数据单位的术语。
   所以架构不同时,字的长度也不一样。
   上面所说一个word是32位,是在mips指令集中。
   在x86指令集中就是一个word就定义为16位,尽管它运行起来更像是32位的。
   维基百科中这样说:字长对计算机构架的存储器模式有很大的影响。
   特别是:通常选择字作为存储器的编址方案,所谓存储器编址方案就是地址码能够指定的最小存储单位。
   In this approach, 编号相邻的内存字组,其位址编号相差一。
   在计算机中这样很自然,因为它通常总是要处理以字为单位的数据(或者是以字的倍数)。
   并且具有让指令可以使用最小的长度来指定一个地址的优点,这样,就可以减少指令长度或者可以定义更多的指令条数       
   举例说明,x86比较复杂,它的指令是变长的。
   拿mips举例来说,它的指令是32位定长,一次从内存中取32位也就是4个byte,然后再进行运算。
   定义的变量也是以32位为单位,例如定义char c;
   虽然char类型只占一个byte,但是内存中是申请了4个byte的空间来存储它。
   所以,在mips中,它的字就是“自然”的定义为32位。       
   通常说CPU的字长,与这里的字稍有不同,指计算机一次最大能操作的数据长度。
   ---------------------------------------update-----------------------------------------
   mips中变量都取32位是指,变量在内存中申请的空间是按照32位对齐的。
   举例说明,假设一行表示32位,那么申请char a, int i.,就占用两行,
   如下ai申请char a,b,c,d   int i,仍然占用两行 
   如下a b c di因为mips从内存中取数据一次是按照32位取出,
   也就是只能一行一行取,不能跨行。所以申请的变量都以32位对齐。
   假如不这样做,没有进行内存对齐,而是直接对空位进行填充。
   第一个例子,char a占用8位,int i占用32位,那么int i的高24位就在第一行,
   而低8位在第二行,cpu就不能正确的进行读取以及运算。因此,内存对齐是有必要的。
   C语言中,int 与 long int 在32位机上都是32位,在64位机上,int 是32位, long int 是64位。
   C中的char是一个字节,因为C出现的相对比较早,8位足够表示ASCII码了。
   但是后来加入了各种其他语言的字符,就出现了能表示更多字符的 unicode 编码。
   C沿用了以前的办法,char仍然是一个字节,一些扩充过的字符集如unicode 就用两个char来表示了。
   有些语言,比如java的char是16位也就是两个字节。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。