• 締切済み

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

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

みんなの回答

回答No.6

直接の回答ではありません。 「実験してみる」というのは、時にあまり良くない方法でもあります。 実験してうまくいかなければ良いのですが、うまくいったときに、 ・うまくいったと勘違いした。 ・そのケース(データ、処理系)だと、たまたまうまくいった。 というケースに遭遇し、あとあと不幸な経験をすることもままありますから。

回答No.5

先頭が数字で始まる変数名を付けるなど言語道断

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.4

そもそも「long は 64ビット」とか「int は 32ビット」とかいうことは (規格では) 決まっていないんだけど,それは大丈夫なの? でそれが大丈夫という前提だけど, もともと int で表現できる値なら問題ありません. 逆に「もともとが int では表せない」ときには, その結果は処理系依存です.

  • kngj1740
  • ベストアンサー率18% (197/1052)
回答No.3

代入ではキャストしなくとも、警告は出るかも知れないがエラーにはならないと思いましたが。

  • black2005
  • ベストアンサー率32% (1968/6046)
回答No.2

簡単だから実際にやってみればいい でないと理解出来ないでしょ その変数名ではコンパイル通らないけどね・・・

  • asuncion
  • ベストアンサー率33% (2126/6288)
回答No.1

私だったら、実験するコードを書いて試してみます。 うまくいけばそれでよいし、ダメだったらどうすればいいかを考えます。

関連するQ&A

  • C# int→byte のキャスト

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

  • C++での24bit符号付き整数値の処理

    現在wavファイルからデータを読み出し、少数倍して再び格納するプログラムを作成しています。 量子化ビット数が16,32bitの場合は読み出したデータをshort型,int型の変数に入れて、そのまま計算が出来るのですが、C++には24bitの変数型がないため、24bitデータの処理に苦戦しています。 1サンプルあたり24bitで格納されているデータを読み出し、(double)倍したのち再び24bitずつ(3byte間隔で)書き込むにはどのようにすれば良いでしょうか? 一度int型に格納し、計算してから上位3byteを書き込む方法が簡単だとは思うのですが、負の値の扱いに困っています。 どなたかサンプルプログラムをお教えいただけると幸いです。

  • dsPIC で 12ビットAD変換・・・

    dsPICで12ビットAD変換を行い,int型の変数に代入してそれをUARTでPCに送信したところ,入力電圧をあげていくごとに0~255が繰り返し出てきました.PCへ送る際は12ビットのデータを上位と下位に分けて送信するか,文字列にして送るかしないとだめなのでしょうか? どなたかよろしくお願いします.

  • 128ビット変数の符合表現について

    C言語で符号付128ビット変数を4つの32ビット変数(signed longまたはunsigned long)で表現したいと思っています。 この場合32ビット変数の符合付き/符合なしはどのように組み合わせるのが適切なのでしょうか。 一応3通りの方法を考えてはみました。 (1)が適切な気もするのですが違う気もします。 アドバイスをお願いします。 (1) 最上位32ビット変数をsigned longにして残りの3つの32ビット変数はunsigned longにする。 (2) 4つの32ビット変数を全てsigned longにする。 (3) 4つの32ビット変数を全てunsigned longにする。

  • キャストを使った型拡張の方法について

    変数が以下のように宣言されている時で、掛け算する場合のキャスト の方法について質問です。 char = data1; short = data2; long = GOUKEI; (1) GOUKEI = (long)data1 * (long)data2; (2) GOUKEI = (long)(data1 * data2 ); 上記、(1)、(2)のキャストは同じ意味と判断して良いのでしょうか? 詳しい方ご回答よろしくお願いします。

  • 32bitと64bitのどちらが良いのか

    windows Vistaからwindows7にアップグレードする場合、32bitよりも64bitを選んだほうがいいんでしょうか?32bitと64bit両方のメリット・デメリットを教えてください。 ちなみにいまはwindows Vistaの32bitを使っています。

  • VC++ windows 64ビットプログラミング

    VC++でのwindows 64ビットプログラミングを勉強しています。 以下のMSDNのページにたどり着き、サンプルプログラムを作りながら確かめているのですが、 http://msdn.microsoft.com/ja-jp/library/3b2e7499.aspx 以下の記述の意味がよく分からないので、教えてください。 ---ここから--- int と long は、64 ビット Windows オペレーティング システムでは 32 ビット値です。 64 ビット プラットフォーム用にコンパイルする必要があるプログラムでは、ポインターを 32 ビット変数に割り当てないように注意してください。 ポインターは、64 ビットのプラットフォームでは 64 ビットなので、ポインターを 32 ビット変数に割り当てると、ポインター値を切り捨てることになります。 ---ここまで--- intとlongのサイズが4バイトでこれは32ビットのときと変わらず、 ポインタのサイズが8バイトに拡張された(これはメモリアドレスが64ビットになったのだから当然)のは理解しているのですが、 http://msdn.microsoft.com/ja-jp/library/94z15h2c.aspx 「ポインターを 32 ビット変数に割り当てる」というのがどういうこと(どういうコード)なのかがわかりません。 こんなことかなとも思ったのですが、これはありえない記述ですよね =============== int a = 0; int *pt = NULL; a = pt; //32ビット変数にポインタを割り当て???(というよりポインタを代入か) error C2440: '=' : 'int *' から 'int' に変換できません。 1> この変換が可能なコンテキストはありません。 =============== 32ビットでは問題にならなくて、64ビットになったから問題になって、どう変えれば問題なくなるのか という感じで説明していただけると分かりやすいのかな思います。 よろしくお願いします。

  • 32bitと64bit

    64bit版を購入したら、32bit版アプリケーションは使用できないのでしょうか? また、ゲームをする場合64bitではできないのでしょうか? 価格が同じなので64bit版を購入したいのですが… 32bit版と64bit版のメリット・デメリットを教えてくださ。

  • キャスト演算子について

    初心者の初歩的な質問ですが、変数の型を変換するキャスト演算子がありますが本を読んでいて思ったのですが変換した式の型はその後どうなるのでしょう? 例で(前略) ----------------------------   int A =0; /*A=0*/ double B =2; /*B=2.000000*/ A = (int)B; B = 3; ----------------------------- とするとA=2 となりますがこの時のBの型はどうなるのでしょう? キャストを使用すると最初に宣言したdoubleがintになってしまうのか?後で代入した3は最初に宣言したdouble型の「3.000000」?それとも変換したint型「3」? 多分最初のままのような気はしますが。よろしくお願いします。

  • ビットの取り出し方法

    いつもお世話になっております。 今回はビットの取り出しについてお聞きしたいです。 たとえばDWORD型の変数があったとして、この変数の5ビット目は0か1かと いうことを知る簡潔な方法はありますか? セットするときはシフト演算を使えばできますが、 あらかじめセットされたものの指定ビット目を得る方法が知りたいです。 bit = dw % 2 という計算でできると思ったのですが、最上位ビットが 何ビット目か判断する方法がよくわからなかったので ご教授願います。

専門家に質問してみよう