将一个输入的int型数值转换到short范围内

  • Post author:
  • Post category:其他


代码如下

static inline short convert(int value)

{

return short((value == short(value)) ? value:(value>>31)^Ox7FFF);

}

本题目基于32位的机器,代码的意思很容易理解,就是输入一个值,然后经过那一个式子运算之后,返回一个值,只是其中运算的部分比较有意思。这其中涉及到两种数据类型,一种是int型:32位,表示范围在 -2147483648(-2^31)~2147483647(2^31-1);另外一种short型:16位,表示范围在-32768(-2^15)~32767(2^15-1)之间。



输入:

一个int型的数值



运算:

返回值的式子是一个三目运算符,按理来说结果应该分两种情况,但是事实上应该分三种情况来考虑,具体请看下文:

(1) 第一种情况:

当输入的值就是一个short范围内的值,即输入的值在-32768~32767之间时,可以看出,这时候直接将这一个值转化为short型的数据直接返回。

(2) 第二种情况:

当输入的值不再short能表示的范围之内,则要执行后面的转换操作,此时又分一下两种情况来考虑:


第一:

当输入的值在负数范围内超过了short范围,什么意思呢?就是说输入的这个值在 [ -2



版权声明:本文为whutlhc原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。