• ベストアンサー

C# int→byte のキャスト

プログラミング初心者です。 int型の変数に255以上の値を代入し、byte型の変数にcastするとbyte型の変数に代入される値はint変数の値から256を引いた値になります。なぜですか、またどういう仕組みでcastは行われるんですか?

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

C#はわかりませんが。 256を引いているわけではありません。 十六進数わかりますか? 255=0x00FF 256=0x0100 257=0x0101 BYTE=8ビットの型に代入したので、末尾の8ビットだけになったということです。 「256引いたのと同じじゃない?」 ここは、 512を入れればわかります。 512=0x0200 = 下位8ビットで0 513=0x0201 = 下位8ビットは1 なんとなく、わかりましたか? CASTは、値の有効部分だけを取り出したものになるということです。 まだ、追加で、signed/unsigned の概念はありますが、 説明は今回は省略します。

ayaka0601
質問者

お礼

迅速な回答ありがとうございました。よくわかりました。

関連するQ&A

  • byte[2] から int へ。

    それぞれintの下位2バイトのビット列保持するbyte型配列の要素2つを int 形の整数に治したいのですがいい方法が思いつきません。例えば、 byte[0] = 0x01; byte[1] = 0x01; ならば、 00000000 00000000 00000001 00000001 で、256 + 1 = 257 byte[0] = 0x02; byte[1] = 0x10; ならば、 00000000 00000000 00000010 0000011 で、512+3 = 515 です。byteの値が0~127の場合は int n = byte[0] << 8 n = n | byte[1] という感じでいけそうなのですが、byte[0]が 0xFF のような負の値のときにint とのビット演算(もしくはシフト演算)で上位2バイト分も補数表記のためか全部1で埋まってしまい、上の方法はだめみたいです。 byte[0] = 0x01; byte[1] = 0xFF; のときは、 00000000 00000000 00000001 11111111 で、256+255 = 511 としたいのですが、場合わけをせずに求める よい方法はないでしょうか。

    • ベストアンサー
    • Java
  • C#のキャストについて(object→byte)

    いつもお世話になっております。C#初心者です。 「メソッドの引数として渡された値をリスト型の配列に格納する」という課題に取り組んでいますが、 変数のキャストで実行時にエラーが発生し、頭を悩ませています。 作成したコードは以下のようになっています。 public class TestClass {  private List<byte> hogeList = new List<byte>();  public void TestMethod( object hoge )  {   hogeList.Add( (byte)hoge ); ← (*)  } } 上記のメソッドをMain関数から TestClass test = new TestClass(); test.TestMethod(5); として実行すると、「hogeList」に「5」が格納される、といった動作にしたいと考えています。 しかしながら、ビルドは通るのですが、実行すると(*)の位置で止まり、 「指定されたキャストは有効ではありません。」 というメッセージが表示されます。 そこで質問なのですが、object型からbyte型にキャストする場合にはどのような記述の仕方がありますでしょうか? ご教授よろしくお願いいたします。

  • int→unsigned int キャスト

    int test01; unsigned test02; の場合、test02にtest01の値を代入したい場合どうすればよいでしょうか? 型は変更できません。 キャストして代入しても大丈夫でしょうか?

  • Byteについて

    おはようございます。お世話になっています。 基本データ型の値をコンストラクタによってカプセル化する際に、intであれば値をそのまま、longであればLをサフィックスとして付けて記述するのですが、byteはどのようにすれば良いのでしょうか?色々試した結果、キャスト演算子を使って(byte)12のようにするとbyte型として認識してくれました。これ以外に何か数値をbyte型にする方法は有るのでしょうか?よろしくお願いします。

    • ベストアンサー
    • Java
  • Java intの扱い

    こんにちは、Javaを勉強しているものです。 小さなデータ(byteなど)をより大きないれもの(intなど)に入れるときには、暗黙的なキャストがおこなわれます。 逆に、大きな値を小さないれものに入れるための変換を「縮小変換」と呼び、これには明示的なキャストが必要だと習いました。 そこで、次のようなコードがあった場合、これは明示的なキャストが必要なのではないのでしょうか? byte b = 3; これは、コンパイルエラーにはならないのですが、 3はint型であり、bはbyte型なので、大きな値を小さな小さないれものに入れているということになります。本来であれば byte b = (byte)3; と書くべきではないのでしょうか? 宜しくお願い致します。

    • ベストアンサー
    • Java
  • VC++2010 大きい桁数をBYTE型配列に代入

    VC++2010 VC++2010 大きい桁数をBYTE型配列に代入する件について質問させていただきますがどう考えても変換する方法が思いつかなかったので質問させていただきました。 たとえば18000とかの大きい10進数の数値をBYTE型の配列に代入したいのですが どういうプログラミングをすればできるのかわかりませんでした。 よろしくお願いします BYTE型変数は 三つあり、また大きい桁数の最大値は16777216となります。まず大きい任意の桁数をみっつのBYTE型変数にわけていれる方式になります。 例:16777216を三つのBYTE型変数にいれると。。。 BYTE bValue1 = 255; BYTE bValue2 = 255; BYTE bValue3 = 255; よろしくお願いします

  • 64bit → 32bit型へのキャスト

    long 64data = 1; int 32data = (int)64data; 64bitの変数で上位32bitは使わない場合、int型の変数にキャストして代入することは可能ですか?

  • int型の内容をbyteの配列にコピー

    int型の内容をbyteの配列にコピーする方法を教えて下さい。 int i_value = 500; byte[] by_value; by_value = new byte[4]; // どのような処理が必要ですか? by_value[0]には、0x1 by_value[1]には、0xf4 と格納したいです。 数字→文字列→文字(byte)できたのですが…。 C言語の場合、memcpy関数で型が異なってもキャストすれば回避できました。 JAVAでの方法を教えて下さい。

    • ベストアンサー
    • Java
  • int i = 0 ;が何を表しているか

    int i=0; これがなにを意味しているか、システムアーキテクチャの観点から、レジスタの利用を絡めて説明できたら、システムエンジニア 変数作って…だけだと理系 0代入してるんでしょ?わかるわかる…だと文系 コンパイル通らねーよ…だとねらー系 ////////////////////////////////////////////// 以上のような文をまとめサイトで発見しました。 私はプログラミング初心者なのですが、上文についてシステムアーキテクチャの観点からレジスタを絡めて説明してくださる方の見解を伺いたいです。 宜しくお願いします。

  • C言語のキャストについて

    C言語のキャストについて こんばんわ、質問です。 『キャスト』と言われる型を合わせるルールがあると思います。 あれはコンパイラに 「違う型の変数への代入だけど、これは意図したことですよ」 ってことを分かってもらうための手段という認識でよろしいでしょうか? コンパイル後、実行時には変数の型情報は使われない(残ってない?)と 思っていますが、その道を極めている方、教えてください。 キャストが何に使われるのか知りたいです。