当前位置:   article > 正文

有关计算机运行时的零扩展和符号扩展与移位运算的总结_符号扩展与0扩展

符号扩展与0扩展

计算机编程中的一种常见运算就是不同类型之间的转换(即位级别的转换)。在转换之时我们要保证被转换的数值保持不变,否则,就有可能发生数值溢出。当然,从较大的数据类型(比如long)转换到较小的数据类型(如short),这根本是不可能的,这样很可能会发生溢出,但是,从一个较小的数据类型转换到较大的数据类型,是可能的。当我们将一个较小数据类型执行零扩展(zero extension)至一个较大的数据类型时,系统只是简单的在数据的开头添加0,当我们将一个较小的数据执行符号扩展(sign extension)时,系统会在数值中添加最高有效位的值的副本。
举个例子,现在有一个16位的short  int的数据为0xc345
当系统执行零扩展至32位int时,该数据就变成0x0000c345
当系统执行符号扩展至32位int时,该数据就变成了0xffffc345(因为c的首位为1)


计算机中移位运算分为两大类:左移位和右移位运算。计算机中的左移位运算规则是数值向左移动k位,舍弃最高的k位,并在右端补k个0。而计算机一般支持两种右移运算:逻辑右移和算数右移。逻辑右移在左端补k个0,算数右移在左端补k个最高有效位的值。比如说,
x=01101100
x<<4  11000000
x>>4(逻辑右移) 00000110
x<<4(算数右移) 00000110


x=11101100
x<<4  11000000
x>>4(逻辑右移) 00001110
x<<4(算数右移) 11111110
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小蓝xlanll/article/detail/272340?site
推荐阅读
相关标签
  

闽ICP备14008679号