cdm/src/main/java/ucar/nc2/dataset/EnhanceScaleMissingUnsignedImpl.java
public static DataType nextLarger(DataType dataType) {
    switch (dataType) {
      case BYTE:   return SHORT;
      case UBYTE:  return USHORT;
      case SHORT:  return INT;
      case USHORT: return UINT;
      case INT:    return LONG;
      case UINT:   return ULONG;
      case LONG:   return DOUBLE;
      case ULONG:  return DOUBLE;
      default:     return dataType;
    }
  }
public static DataType nextLarger(DataType dataType) {
    switch (dataType) {
      case BYTE:   return SHORT;
      case UBYTE:  return USHORT;
      case SHORT:  return INT;
      case USHORT: return UINT;
      case INT:    return LONG;
      case UINT:   return ULONG;
      case LONG:   return DOUBLE;
      case ULONG:  return DOUBLE;
      default:     return dataType;
    }
  }
public static DataType nextLarger ( DataType dataType ) { switch ( dataType ) { case BYTE : return SHORT ; case UBYTE : return USHORT ; case SHORT : return INT ; case USHORT : return UINT ; case INT : return LONG ; case UINT : return ULONG ; case LONG : return DOUBLE ; case ULONG : return DOUBLE ; default : return dataType ; } }
Returns the smallest numeric data type that:
<ol>
<li>can hold a larger integer than {@code dataType} can</li>
<li>if integral, has the same signedness as {@code dataType}</li>
</ol>
The relative sizes of data types are determined in a manner consistent with {@link #rank(DataType)}.
<p/>
<table border="1">
<tr>  <th>Argument</th>  <th>Result</th>  </tr>
<tr>  <td>BYTE</td>      <td>SHORT</td>   </tr>
<tr>  <td>UBYTE</td>     <td>USHORT</td>  </tr>
<tr>  <td>SHORT</td>     <td>INT</td>     </tr>
<tr>  <td>USHORT</td>    <td>UINT</td>    </tr>
<tr>  <td>INT</td>       <td>LONG</td>    </tr>
<tr>  <td>UINT</td>      <td>ULONG</td>   </tr>
<tr>  <td>LONG</td>      <td>DOUBLE</td>  </tr>
<tr>  <td>ULONG</td>     <td>DOUBLE</td>  </tr>
<tr>
<td>Any other data type</td>
<td>Just return argument</td>
</tr>
</table>
<p/>
The returned type is intended to be just big enough to hold the result of performing an unsigned conversion of a
value of the smaller type. For example, the {@code byte} value {@code -106} equals {@code 150} when interpreted
as unsigned. That won't fit in a (signed) {@code byte}, but it will fit in a {@code short}.

@param dataType  an integral data type.
@return  the next larger type.
Returns the smallest numeric data type that : <ol > <li > can hold a larger integer than { @code dataType } can< / li > <li > if integral has the same signedness as { @code dataType } < / li > < / ol > The relative sizes of data types are determined in a manner consistent with { @link #rank ( DataType ) } . <p / > <table border = 1 > <tr > <th > Argument< / th > <th > Result< / th > < / tr > <tr > <td > BYTE< / td > <td > SHORT< / td > < / tr > <tr > <td > UBYTE< / td > <td > USHORT< / td > < / tr > <tr > <td > SHORT< / td > <td > INT< / td > < / tr > <tr > <td > USHORT< / td > <td > UINT< / td > < / tr > <tr > <td > INT< / td > <td > LONG< / td > < / tr > <tr > <td > UINT< / td > <td > ULONG< / td > < / tr > <tr > <td > LONG< / td > <td > DOUBLE< / td > < / tr > <tr > <td > ULONG< / td > <td > DOUBLE< / td > < / tr > <tr > <td > Any other data type< / td > <td > Just return argument< / td > < / tr > < / table > <p / > The returned type is intended to be just big enough to hold the result of performing an unsigned conversion of a value of the smaller type . For example the { @code byte } value { @code - 106 } equals { @code 150 } when interpreted as unsigned . That won t fit in a ( signed ) { @code byte } but it will fit in a { @code short } .