• ベストアンサー

int i = 0 ;が何を表しているか

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

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

  • ベストアンサー
noname#252929
noname#252929
回答No.2

こんなもの。 レジスタを絡めて考えるなんて意味ない話なんですが。。 だって、これはコンパイル前のソースですよね? コードに置き換えられる時、このまま置き換えられる訳じゃないですよ。変数定義と変数への初期値設定だけですから。 コードに置き換えられた時、変数iなんていうものはiではなく、メモリ番地でしかありません。 なので、レジスタに0を設定して、指定されたメモリ番地にレジスタの内容を書き込む。というだけのコードになるだけですが。。。

その他の回答 (1)

  • ubku
  • ベストアンサー率37% (227/608)
回答No.1

「整数型の変数iを使うのでゼロで初期化しといて」、とコンパイラに教えています。この変数iがレジスタに割り当てられるのか、メモリ上に割り当てられるのかは、コンパイラが判断します。

関連するQ&A

  • C# int→byte のキャスト

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

  • (int *)の意味

    しょーもない質問すみません。 C++を独学中のプログラミング自体初学者です。 今読んでる教科書に、malloc関数の説明として、 指定された大きさの領域をヒープに割り当て、その領域の先頭のポインタを返す関数であるとあり、 例には、 .... int *x; x=(int *)malloc(sizeof(int)); *x=100; ..... などとあるのですが、malloc関数の前の(int *)は xはあくまで変数、malloc関数で帰ってくるのはpointerなので、 *でポインタから変数にした上で、その変数の型をintに強制的にしているという理解で合っているでしょうか?? どうも*がついている分、xはポインタのような気もして、混乱しています。

  • 文字列や文字から整数への変換方法について

    文字列(string型)や文字(char型)から整数(int型など)に変換 する時のルールがよく解りません。 たとえば、キーボードから数字を打って、その入力された数字を 数値として整数型の変数に代入したい場合のやり方です。 ちょっとプログラムを作ってみました。 using System; class clmain { private static void Main() { Console.Write("1桁の整数を入れてね "); char ch = char.Parse(Console.ReadLine()); int by1 = (int)ch; int by2 = (int)char.GetNumericValue(ch); Console.WriteLine("by1 = {0}, by2 = {1}, ch = {1}", by1, by2, ch); Console.Write("整数を入れてね "); string st = Console.ReadLine(); /* by = (int)st; コンパイルエラー */ int by3 = int.Parse(st); Console.WriteLine("by3 = {0}, st = {1}", by3, st); } } まず、char型からint型への変換では、  int型変数=(int)char型変数; はコンパイルは通りますけど、実行すると全く違った値が入って しまいます。たとえば char型変数の値が "1" だと、int型変数には 49 が入ります。 int型変数 = (int)char.GetNumericValue(char型変数); と書いてようやく、思い通りの動きをしてくれます。 また、string型からint型への変換では  int型変数=(int)string型変数; はコンパイルエラーになります。 int型変数 = int.Parse(string型変数); とするとコンパイル出来て正しく動きます。 これで質問ですけど、 (1)なぜstring型とchar型で、int型への変換方法が違うのでしょうか? (2)int型変数=(int)char型変数; とすると、上に書いたように、全く 違った(希望しない)値が代入されてしまいます。これは、どういう 動きをしているのでしょうか? また、これはコンパイルエラーに なりませんけど、どういう時にこの書き方をするのでしょうか? 解る方、お願いします。

  • 整数xxxが大き過ぎますというエラーメッセージ(Java)

    最近javaを始めた者です。 javaの初歩的なプログラミングなのですが、long型の変数を定義して例えば10個の数字1234567890をその変数に代入してやるとエラーなくコンパイルされるのですが、 11個以上の数字、例えば12345678900を代入してコンパイルしようとすると質問タイトルのようなエラーメッセージが表示されてしまいます。 long型の変数を使えば11個の数字なら問題なく代入できると理解しているのですが、これは間違っているのでしょうか。 エラーがでる理由がわからなくて困っています。このエラーについて、また、どのようにすれば11個以上の数字が代入できるのか教えてください。お願いします。

    • ベストアンサー
    • Java
  • 仕事をするにあたり不安。

    「システムエンジニアに理系出身者も文系出身者もないよ。研修をすればみんな同じくらいのレベルになるよ。」 よく説明会に行くと言われましたが、 内定後の今になって不安になってきました。 少なくとも、理系出身者は文系出身者に比べて大学4年間はエンジニアとして勉強してきたわけですよね?ものづくりに携わってきたわけですよね? さすがに「同じレベル」はないと思いますが...... これでは文系出身者のほうが不利ではないですか? それとも文系出身者には理系出身者にはない「あるもの」があるのでしょうか。 たとえばコミュニケーション能力が理系出身者より優れているとか。 実際に現場の方にお聞きしたいです。 理系出身者と文系出身者の違いは明らかですか?それともあまり違いはありませんか?

  • ラッパークラスのvalueOfメソッドについて

    あるテキストで、「int i = Integer.valueOf("10");」はvalueOfメソッドの戻り値型がIntegerであるにも関わらずint型変数に代入しようとしているためにコンパイルエラーになると解説されていました。 しかし、実際にコードを書いてみると、上記のコードはコンパイルが通ります。(代入時にアンボクシングされているということでしょうか) テキストはJava2 Platform5.0のものなので、Java SE6で何かしら仕様が変更されているのかと思ったのですが、どなたか詳しい方、解説をお願いします。

    • ベストアンサー
    • Java
  • 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ビットになったから問題になって、どう変えれば問題なくなるのか という感じで説明していただけると分かりやすいのかな思います。 よろしくお願いします。

  • javaプログラミング これってできるでしょうか?

    Javaのプログラミングで、例えば System.out.println(""); の、System.out.printlnを変数で代入して、仮にyを代入したとしらその後の System.out.println("");は y(""); にしたりすることはできるのでしょうか?できるのならどうやってやるのでしょうか? 回答よろしくお願いします。

    • ベストアンサー
    • Java
  • 関数の引数なしを変数に代入したら入ってきた数値は何?

    デバッグソフトで自分のプログラムを動かしていたときに、 int test_func(char x) { x = x + 1; ------(中略)----------- return x; } int main(void) { int test_val; ------(中略)----------- test_val = test_func; ------(中略)----------- } このようにtest_func(char x)という関数の戻り値を変数test_valに代入するつもりだったのですが、間違って引数部分を書かずにコンパイルしてしまいました。 このときにコンパイルでエラーが出ると思ったのですが、コンパイル完了でデバッガで変数test_valをみてみると何か値が入っていました。 ちょっと気になったのですが、この変数の中に入った値はいったい何なのでしょうか。ご存じの方いらっしゃいましたらご教授お願いいたします。

  • 商、余り

    はじめまして。 以下のプログラムでコンパイルするとエラーがでます。 変数aをintにして%dですれば成功しますが 変数floatではなぜ失敗するのでしょうか?? #include<stdio.h> int main() { float a; a=13; printf("%f",a%2); return(0); } コンパイルすると エラー6: 浮動小数点の不正な使用(関数 main ) 警告 8: 'a' に代入した値は使われていない(関数 main ) とでます。 初歩的な質問ですがよろしくお願いします。