C#
 Computer >> コンピューター >  >> プログラミング >> C#

C#のUInt16構造体とは?特徴と主要メソッド(CompareTo・Equals)の使い方を解説

C#におけるUInt16構造体は、16ビットの符号なし整数を表す値型です。扱える値の範囲は「0 ~ 65,535」となっており、負の値を格納することはできません。その代わり、同じ16ビット幅のInt16(short型)と比較して、正の数を約2倍の範囲まで表現できるのが特徴です。

この記事では、UInt16構造体が提供する代表的なメソッドであるCompareTo()Equals()について、構文や実際のコード例を交えながら詳しく解説していきます。

UInt16.CompareTo()メソッド

UInt16.CompareTo()メソッドは、現在のインスタンスと指定したオブジェクト、または別のUInt16値を比較し、両者の相対的な大小関係を示す整数値を返します。

構文

public int CompareTo (object val);
public int CompareTo (ushort val);

1つ目の構文では、比較対象となるオブジェクトを引数に指定します。2つ目の構文では、比較対象となる16ビット符号なし整数(ushort)を指定します。

戻り値について

  • 0より小さい値:現在のインスタンスが比較対象よりも小さい場合
  • 0:現在のインスタンスが比較対象と等しい場合
  • 0より大きい値:現在のインスタンスが比較対象よりも大きい場合

コード例1:ushort同士の比較

それでは、UInt16.CompareTo()メソッドを使った具体的な例を見てみましょう。

using System;
public class Demo {
    public static void Main(){
        ushort val1 = 25;
        ushort val2 = 55;
        int res = val1.CompareTo(val2);
        Console.WriteLine("Return value (comparison) = " + res);
        if (res > 0)
            Console.WriteLine("val1 > val2");
        else if (res < 0)
            Console.WriteLine("val1 < val2");
        else
            Console.WriteLine("val1 = val2");
    }
}

実行結果

Return value (comparison) = -30
val1 < val2

この例では、val1(25)からval2(55)を引いた差分である「-30」が戻り値として返され、「val1 < val2」が出力されます。CompareTo()メソッドは単なる大小判定だけでなく、差分の値も返してくれる点が便利です。

コード例2:object型との比較

次に、object型としてボックス化されたUInt16値との比較例を見てみましょう。

using System;
public class Demo {
    public static void Main(){
        ushort val1 = 25;
        object val2 = (ushort)2;
        int res = val1.CompareTo(val2);
        Console.WriteLine("Return value (comparison) = " + res);
        if (res > 0)
            Console.WriteLine("val1 > val2");
        else if (res < 0)
            Console.WriteLine("val1 < val2");
        else
            Console.WriteLine("val1 = val2");
    }
}

実行結果

Return value (comparison) = 23
val1 > val2

今回はval1(25)の方がval2(2)よりも大きいため、正の値「23」が返され、「val1 > val2」が出力されます。object型を引数に取るオーバーロードを使用する場合は、比較対象がUInt16型でないとArgumentExceptionがスローされる点に注意してください。

UInt16.Equals()メソッド

UInt16.Equals()メソッドは、現在のインスタンスが指定したオブジェクトまたはUInt16値と等しいかどうかを判定し、その結果をbool型(true / false)で返します。

構文

public override bool Equals (object ob);
public bool Equals (ushort ob);

1つ目の構文の引数obには、現在のインスタンスと比較するオブジェクトを指定します。2つ目の構文の引数obには、比較対象となる16ビット符号なし整数を指定します。

コード例1:異なる値の比較

まず、等しくない値同士を比較した場合の動作を確認してみましょう。

using System;
public class Demo {
    public static void Main(){
        ushort val1 = 52;
        ushort val2 = 10;
        bool res = val1.Equals(val2);
        Console.WriteLine("Return value (comparison) = " + res);
        if (res)
            Console.WriteLine("val1 = val2");
        else
            Console.WriteLine("val1 != val2");
    }
}

実行結果

Return value (comparison) = False
val1 != val2

val1(52)とval2(10)は異なる値のため、Equals()メソッドはfalseを返し、「val1 != val2」が出力されます。

コード例2:同じ値の比較

続いて、同じ値同士を比較した場合の例を見てみましょう。

using System;
public class Demo {
    public static void Main(){
        ushort val1 = 100;
        ushort val2 = 100;
        bool res = val1.Equals(val2);
        Console.WriteLine("Return value (comparison) = " + res);
        if (res)
            Console.WriteLine("val1 = val2");
        else
            Console.WriteLine("val1 != val2");
    }
}

実行結果

Return value (comparison) = True
val1 = val2

val1とval2がどちらも100という同じ値のため、Equals()メソッドはtrueを返し、「val1 = val2」が出力されます。

まとめ

UInt16構造体は、0~65,535の範囲の符号なし整数を扱うための値型です。CompareTo()メソッドを使えば大小関係の比較と差分の取得ができ、Equals()メソッドを使えば等価性の判定ができます。用途に応じてこれらのメソッドを使い分けることで、UInt16値の比較処理を簡潔かつ安全に記述することができます。

  1. C#で2つの数値を入れ替える(スワップする)方法

    C#で2つの数値の値を入れ替える(スワップする)場合、一時的な変数を使わずに、足し算と引き算を組み合わせたロジックで実現できます。ここでは、その基本的な考え方と実際のコード例を紹介します。 入れ替えの基本的なロジック まず、入れ替える対象となる2つの変数を用意します。 val1 = 100; val2 = 200; 次に、以下の3つの演算を行うことで、変数の値を入れ替えることができます。 val1 = val1 + val2; val2 = val1 - val2; val1 = val1 - val2; 仕組みの解説 このロジックがどのように機能するのか、順を追って確認してみましょう。

  2. Pythonのstructモジュール入門:データ型とバイト列の相互変換

    このチュートリアルでは、Pythonのstructモジュールについて詳しく解説します。それでは早速見ていきましょう。 structモジュールは、Pythonのネイティブなデータ型をバイト列(bytes)に変換したり、その逆の変換を行ったりするために使用されるモジュールです。標準ライブラリに含まれる組み込みモジュールのため、追加のインストールは一切不要です。 structモジュールはC言語と密接な関係があります。このモジュールを扱うには、C言語で各データ型を表すために使用されるフォーマット文字(記法)を理解しておく必要があります。主なものを以下の表にまとめました。 データ型フォーマット文字