- ベストアンサー
Javaの型拡張について
現在、Javaの勉強をしています。 型拡張が理解できません。 以下の場合、float型(32ビット)に拡張されるようですが、 私の理解では、一番大きな型はlong型(64ビット)なので、long型だと考えています。 float型に拡張される理由を説明して下さる方お願いします。 次の式全体の型は何になるのか答えなさい。 char ch; shot s; long l; float f; f / ch - (s * l); よろしくお願いします。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
関連するQ&A
- strchr() の第2引数はなぜ int 型なのでしょうか
もしかすると、ちょい前の質問(https://okauth.okwave.jp/qa4151232.html)と同じことを聞いているような気もしますが、気にせずポスト。 その質問を読んだ時に strchr() のマニュアルを見たわけなんですが、そのプロトタイプ宣言は char* strchr(const char* s, int c); なんですね。どうして第 2 引数の型が int なのでしょう?「文字」c を検索するんだから普通に考えれば char ではないかと思うのですが、誰か教えて下さい。 ソースはこんな感じだったので、int である必要はないように思えるのですがどうなんでしょうか? 負数を与えたときに「何らかの動作」を期待してのことなのでしょうか? char* strchr(const char* s, int c) { char ch; ch = c; /* <= 結局 char 型にしている */ for ( ; ; ++s) { if ( *s == ch ) { return (char*)s; } if ( *s == '\0' ) { return NULL; } } }
- ベストアンサー
- C・C++・C#
- 変数 および ポインタのサイズ(バイト数)について
sizeof演算子を使ってchar int float double型のバイト数を調べると、char 型については1バイトと決まっていて、int float doubleについては2から8バイト(処理系によって違う)なのは理解できます。しかし、char* int* float* double*型(ポインタ型)のバイト数は2から4バイトになるのが多いとおもいますが、どういう理由でポインタ型のバイト数が決まるのか、その理由をお教え願いたく思います。16ビットcpuあるいは32ビットcpuと言うハードの影響なのかそれとも何かソフトによるのか、その理由を知りたいと思います。なお私の処理系ではポインタは全て4バイトになっています。特に不思議に思うのはchar型は1バイトなのに、char*型が4バイトになっていることです。 宜しく願います。
- ベストアンサー
- C・C++・C#
- char型変数のアドレスを coutで表示するには
#include <iostream> using namespace std; int main() { bool b; int i; short s; long l; float f; double d; char c; //上で宣言した変数のアドレスを表示 cout << "bool &b " << &b << endl; cout << "int &i " << &i << endl; cout << "short &s " << &s << endl; cout << "long &l " << &l << endl; cout << "float &f " << &f << endl; cout << "double &d " << &d << endl; cout << "char &c " << &c << endl; //「char &c 」とのみ表示される cout << '\n'; //char型のみ printf で再表示 printf("char &c %p\n", &c); //「char &c ********」と表示される return 0; } 上のプログラムを実行すると cout << "char &c " << &c << endl; のところだけ、アドレスが表示されません。 printfを使えば、char型の変数のアドレスも表示されるのですが…。 coutを使ってchar型のアドレスを表示させるにはどうすればいいのでしょうか。 よろしくお願いします。
- 締切済み
- C・C++・C#
- float 型のデータのメモリ上での理解の仕方
詳しい方教えていただけると助かります。 OS:LINUX コンパイラ:GCC 以下のプログラムを実行し、結果ファイルの test.txt を od で見ると 期待した通りの結果になりません。long 型や、short型は期待通りの結果になるのですが。 どういうロジックを経て、以下のような数値になっているのでしょうか?変換ロジック等がわかるとありがたいのですが・・・。 #include <stdio.h> main() { float f; char line[4]; FILE *fp; f = 1234; memcpy(&line[0], &f, sizeof(float)); fp = fopen("test.txt", "w"); fputc(line[0], fp); fputc(line[1], fp); fputc(line[2], fp); fputc(line[3], fp); fclose(fp); } test.txt 内容を od した結果の数値 0000 c000 8c29 4167
- ベストアンサー
- C・C++・C#
- 文字列リテラルの比較について
下記のプログラムの疑問点を教えて頂きたい。 (1)mainの実引数(ch[0]は、str_chr関数を呼ぶ場合、intの型変更する理由、 (2)cをキヤストしてchar 型変更した後、再度int C に代入する理由 (3)char型*Sとint 型Cでは、型が違うのに何故比較できる理由 char *str_chr(const char *s, int c) { c = (char)c; while (*s != c) { } main { char ch[2]; str_chr(G,ch[0]) main {
- ベストアンサー
- C・C++・C#
- 文字を整数として扱う場合の演算について質問
javaの参考書に、文字を整数として扱う場合の演算についての解説があり、疑問点があったので質問します。 質問1:何故char型の変数は、キャストしなくてもint型のリテラルを代入することができるのか? 例えば、 以下の演算はキャストしなくてもこのまま代入できます。 char ch='a'; ch=98; でも、以下の演算はキャストしていないのでエラーになります。 char ch='a'; ch=ch+1; これは何故ですか?参考書に記載されていた理由として、「byte,char,short、 これ等の型の変数や値を使って計算すると、それ等は一度intに直して計算されるから」というような趣旨の事が書いてありました。 つまり、char型の変数には、キャストしない限りint型の数値を代入できないということですよね? でも前者のソースコードは、chはchar型であるにもかかわらず、int型のリテラル98を代入できています。 これは何故ですか? 質問2:javaの参考書に、インクリメント・デクリメント演算子と複合代入演算子は、型を保存するという解説がありました。これはどういう意味ですか? 僕の仮説では、例えば、 char ch='a'; ch+=5; であれば、5は、char型のまま代入されるということでしょうか?
- ベストアンサー
- Java
- Aviutl+拡張x264出力の音声部分について
よろしくお願いします。 Aviutlの拡張x264出力を使って動画をエンコードしたとき、 仕上がった動画には特に問題(音ズレ等も発生しない)がなかったのです。 しかし出来たmp4ファイルを真空波動研で見てみると 704x396 24bit AVC/H.264 Main@3 30fps 34763f 1023.88kb/s AAC 48.00kHz 2.0ch(2/0 L+R) HE 310.74kb/s となっていました。 ここでの問題は、AAC HEになっていることです。 ピアノの動画なので出来たらAAC LCでエンコードしたいので再度設定をしなおし再エンコード。 しかし、出来上がったものはAAC HEになっていました。 拡張x264出力の音声設定ではAAC LC ***を確実に選んでいます。 なにか特別な設定が必要なのでしょうか? お分かりの方が居られましたら、どんなことでもかまいませんので教えてください。 AACへのエンコードには neroAacEnc.exe を使っています。
- ベストアンサー
- Windows XP
- アドレスから値を求める
Cのアドレスで悩んでいます。 long adrBuf[4]の配列に、アドレスが入っています。 そして、 adrBuf[0]には、float型データのアドレス adrBuf[1]には、short型データのアドレス adrBuf[2]には、float型データのアドレス adrBuf[3]には、char型データのアドレス となっています。 以下のような、ことをしたいのですが、右辺の記述が わかりません。教えて下さい。 float f1 = adrBuf[0]のアドレスの値を代入 short s1 = adrBuf[1]のアドレスの値を代入 float f2 = adrBuf[2]のアドレスの値を代入
- ベストアンサー
- C・C++・C#
- 'const char *' 型は 'char *' 型に変換できない ??
Case 1 Text9.Text = "AB"; Text10.Text = "A"; // 1文字目 Text11.Text = "B"; // 2文字目 case 2; Text9.Text = "Ab"; Text10.Text = "A"; Text11.Text = "b"; case 3; Text9.Text = "aB"; Text10.Text = "a"; Text11.Text = "B"; case 4; Text9.Text = "ab"; Text10.Text = "a"; Text11.Text = "b"; 上記のようなCase 文を C を使って作成したいのですが, A~J の大文字とa~jまでの小文字をつかって,2文字の文字列をつくるとき, 1文字目と2文字目が,形態も名称も異なる文字列(例 AB , Ab aB, ab, AC, Ac aC ac, ...)のcase文をつくりたいのですが, 'const char *' 型は 'char *' 型に変換できないというエラーメッセージがでてしまいます.下記プログラムをどう直せばいいかおしえてください. #include <stdio.h> #define MAX_NAME 256 int main(void) { const char *NAME12 = "Text9"; const char *NAME1 = "Text10"; const char *NAME2 = "Text11"; const char *ALPH = "ABCDEFGHIJabcdefghij"; FILE *fp = NULL; char f_name[MAX_NAME]; int count = 0; char *p = ALPH; char *q = ALPH; printf("ファイル名:"); scanf("%s", f_name); fp = fopen(f_name, "w"); if (fp == NULL) { printf("'%s':ファイルが見つかりません\n", f_name); } else { for (p = ALPH; *p != '\0'; p++) { for (q = ALPH; *q != '\0'; q++) { if (*p != *q) { count++; fprintf(fp, "Case %d\n", count); fprintf(fp, "%s.Text = \"%c%c\"\n", NAME12, *p, *q); fprintf(fp, "%s.Text = \"%c%c\"\n", NAME1, *p, *q); fprintf(fp, "%s.Text = \"%c%c\"\n", NAME2, *p, *q); } } } fclose(fp); } return 0; }
- ベストアンサー
- C・C++・C#
お礼
ご回答ありがとうございます。 型拡張って聞いて私が勝手にビット数の多い方に拡張されると、 勘違いしただけで、Javaの仕様はご回答者様が載せてくださったリンクの通りなのですね。 仕様なら仕様で私的理解もOKです。 ありがとうございます。 以上