计算机原理与设计符号扩展_第1页
计算机原理与设计符号扩展_第2页
全文预览已结束

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、从到unsigned unsigned short;然后从shortunsigned unsigned 从到unsigned unsigned short;然后从shortunsigned unsigned long unsigned unsigned unsigned long unsigned unsigned 、 短数据类型扩展为长数据类型、 要扩展的短数据类型为有符号数的( 即比短数据类型多出的那一部分)如 1cha r x10001001b ; short yx ; 则 y 11111111 10001001b;2char x00001001b ; short yx ; 则 y 00

2、000000 00001001b、 要扩展的短数据类型为无符号数的进行零扩展, 如 1unsigned char x10001001b ; short yx ; 则 y 00000000 10001001b2unsigned char x00001001b ; short yx ; 则 y 00000000 00001001b;如果长数 据类型的 高字节 全为 1 或全为 01 或不全为 0错 误 。直接将内存中的数据赋给要转化的类型,数值大小则会发生变化。另短类型扩展为长类型时,但短类型与长类型分属有符号数与无符号数时,则先按规则一进行类型的扩展,再按本规则直接将内存中的数值原封不动的赋给对

3、方。从到unsigned unsigned unsigned unsigned unsigned unsigned unsigned unsigned longlong unsigned longlong unsigned long longlong unsigned unsigned unsigned 从到unsigned unsigned unsigned unsigned unsigned unsigned unsigned unsigned longlong unsigned longlong unsigned long longlong unsigned unsigned unsig

4、ned unsigned unsigned unsigned unsigned unsigned longlong unsigned longlong unsigned long longlong unsigned unsigned unsigned unsigned unsigned unsigned unsigned unsigned longlong unsigned Convert directly to unsigned long longlong 数现代高级程序设计语言允许程序员使用包含不同大小的整数对象的表达式。那么,当一个表达式的两个操作数大小不同的时候,会发生什么呢?有些语言

5、会报错,而其他的语言则会自动将操作数转换成一个的格式。这种转换是有代价的,因此,如果你不希望编译器在你不知情的情况下自动加入各种转换到你原本非常完美的代码中,就需要掌握编译器是如何处理这些表达式的。进制补码系统中,同一个负数在不同大小的表示法中的表示是不同的。你不能在一个包含 16 位数的表达式中随意地使用 8 位有符号数,转换是必需的。这种转换,以及其逆操作(将 16 位数转换为 8 位)就是符号扩展(sign exten )与缩减(contraction)操作。-64 为例,其 8 位的二进制补码表示是$C0,而等效的 16 位二进制补码表示则是$FFC0。很显然,其位模式不一样。再看看数

6、+64,其 8 unsigned long 16 位表示分别是$40 与$00408 16 位表示分别是$40 与$00408 位的数符号扩展到16 位,只需将8 位数的第7 位到16 位数的第8 . 15 位即可。而将一个16 位数符号扩展到一个双字,只需要将第15 位到双字的第 16 . 理不同长度有符号数的时候,必须使用符号扩展。例如,在将一个字节量与一个字量相加的时候,在相加之前必须将字节量符号扩展到 16 其他运算可能又会需要符号扩展到 32 2-5 符号扩展举81632二进制补码表 处理无符号二进制数的时候,可以使用零扩展(zero exten)来将小位数的无符号数扩展到大位数的无

7、符号数。零扩展非常简单只需要用零来填充大位数操作数的高端各个字节即可。例如,为了将8 位数$82 零扩展到16 位,只需要在高端字节中零,即得到$0082。2-6 零扩展举81632二进制补码表 大多数高级语言编译器会自动处理符号扩展与零扩展,以下 C 语言的例子说明了它们signed char sbyte; / C 语言中的字符类型是一个字节 short sword;/C语言中的短整型一般是16位 long / C 语言中的长整型一般是32 位. .sword = sbyte;/自动将 8 位值符号扩展到 16 位 sdword = sbyte;/自动将8 位值符号扩展到32 位 sdwor

8、d=/自动将16 位值符号扩展到32 语言(例如Ada)在从小数据类型转换到大数据类型时需要显式转换(explic)。查一下所用语言的参考手册就知道这种显式转换是不必需的了。要求提供显式转换的语言的优点在于编译器不会在程序员不知情的情况下做任何事情。如果你没有提供必要的转换,编译器会给出一个消息,让你知道程序还符号扩展和零扩展,有一点需要明确的是,它们是需要付出代价的。将一个小整型赋值给一个大整型可能会比在同样大小的整型变量间传输数据需要的机器指令(执行时间更长)。因此,在一个数学表达式或者一条赋值语句中混合使用不同大小的变量要。符号缩减,即将一个某位数转换为值相同但位数变小的数,比较麻烦。符号扩不会失败,使用符号扩展,一个 m 位有符号可以转换一个 n 位数(这里 nm)。不幸的是,在 mm)。不幸的是,在 m=128&sword=128&sword=32768&sdword=32767sword=(short )易见,这让代码变。C/C+中,你可能会倾向于将它们编写为

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论