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値の比較処理を簡潔かつ安全に記述することができます。
-
C#で2つの数値を入れ替える(スワップする)方法
C#で2つの数値の値を入れ替える(スワップする)場合、一時的な変数を使わずに、足し算と引き算を組み合わせたロジックで実現できます。ここでは、その基本的な考え方と実際のコード例を紹介します。 入れ替えの基本的なロジック まず、入れ替える対象となる2つの変数を用意します。 val1 = 100; val2 = 200; 次に、以下の3つの演算を行うことで、変数の値を入れ替えることができます。 val1 = val1 + val2; val2 = val1 - val2; val1 = val1 - val2; 仕組みの解説 このロジックがどのように機能するのか、順を追って確認してみましょう。
-
Pythonのstructモジュール入門:データ型とバイト列の相互変換
このチュートリアルでは、Pythonのstructモジュールについて詳しく解説します。それでは早速見ていきましょう。 structモジュールは、Pythonのネイティブなデータ型をバイト列(bytes)に変換したり、その逆の変換を行ったりするために使用されるモジュールです。標準ライブラリに含まれる組み込みモジュールのため、追加のインストールは一切不要です。 structモジュールはC言語と密接な関係があります。このモジュールを扱うには、C言語で各データ型を表すために使用されるフォーマット文字(記法)を理解しておく必要があります。主なものを以下の表にまとめました。 データ型フォーマット文字