• 締切済み

演算子

yamaichiroの回答

回答No.2

d>>eでなければ、e=-2の誤植じゃないでしょうか。 仮にd,eが1byteだったとしても0000 0110bが左に2 bit移動して0001 1000bで24ですし、左1bit移動が 2倍で、もう1bitでさらに2倍なので6x2x2=24です ものね。 それとも、<<演算子がオーバーロードされて右シ フトとして定義されているとか、ってできるんで したっけ。

関連するQ&A

  • C言語の演算について

    次のプログラムを実行したらどう出力されますか。 微妙な代入演算の違いが分からないので、教えていただけないでしょうか。 #include<stdio.h> void main (void) { int x = 5; int y = 8; int z = 3; int a,b,c,d,e,f; a = y == x + z; b = !x; c = x + y / z; d = x *=z - 1; e = --y / --z; f = y+++ % x++; printf("%d,%d,%d,%d,%d,%d\n",a,b,c,d,e,f); } できれば途中のトレースも書いていただけると助かります。 よろしくお願いします。

  • C言語の演算について

    次のプログラムを実行したらどう出力されますか。 微妙な代入演算の違いが分からないので、教えていただけないでしょうか。 #include<stdio.h> void main (void) { int x = 5; int y = 8; int z = 3; int a,b,c,d,e,f; a = y == x + z; b = !x; c = x + y / z; d = x *=z - 1; e = --y / --z; f = y++ % x++; printf("%d,%d,%d,%d,%d,%d\n",a,b,c,d,e,f); } できれば途中のトレースも書いていただけると助かります。 よろしくお願いします。 なお、先ほど記述ミスがあるのにも関わらず投稿してしまいました…。 正しい記述はこちらの質問です。 大変失礼しました。 前の質問は削除可能になり次第、削除いたします。

  • インクリメント演算子について

    インクリメント演算子について プログラミング超初心者です。 大学のプログラミングの課題で インクリメント演算子を使って 数字をひとつずつ大きく(小さく)していくという課題が出ました 私が作ったプログラムは以下のとおりです #include <stdio.h> int main(void) { int x ; //変数宣言 printf("整数値を入力してください:"); scanf("%d",&x); printf("1ずつ増加\n"); printf("%d,",x++); printf("%d,",x++); printf("%d,",x++); printf("%d,",x++); printf("%d\n",x); printf("1ずつ減少\n"); printf("%d,",x--); printf("%d,",x--); printf("%d,",x--); printf("%d,",x--); printf("%d\n",x--); } ちなみに、整数値は10にしました。 結果は 1ずつ増加 10,11,12,13,14 1ずつ減少 14,13,12,11,10 と、望んでるものになったのですが、疑問があるので質問させていただきます。 xを変数にすると、x++はx+1になると思うのですが表示されたのは10、11、…と 10から表示されました。 しかも、増加していった最後のxはなぜ14になるのでしょうか? 課題は出来たのですが、頭が混乱しています… 詳しく解説をお願いします。

  • 条件演算子

    このプログラムをIF文じゃなくて条件演算子を使って書き換えることはできますか? #include <stdio.h> int main(void) { int vx; printf("整数入力しなさい:"); scanf("%d,&vx"); if(vx) puts("その数は非0");   else puts("その数は0"); return(0); }

  • ビット演算について

    以下のプログラムを作成して、int型、char型、long型のAND演算・OR演算の結果の違いを見ました。 実行結果からchar型だけ結果の表示の仕方が他と異なっています。 一般的に、バイト数では、 char(1バイト) < short(2バイト) < int(4バイト) のはずなのに、出力結果は、 char(0xffffffff) > short(0xff) = int(0xff) となっていて、charが一番大きく?、shortとintが同じ結果? のようにみえてしまいよくわかりません。 私は、ビット演算が苦手なので、根本的に考え方が間違っているのかも しれませんが、どうしてこのような出力結果となるのか教えてください。 プログラム #include <stdio.h> #include <stdlib.h> int main() { int xi = 0x7F, yi=0x80; int stri1 = xi&yi; int stri2 = xi|yi; printf("** int **\n"); printf("%p\n",stri1); printf("%p\n\n",stri2); char xc = 0x7F, yc=0x80; char strc1 = xc&yc; char strc2 = xc|yc; printf("** char **\n"); printf("%p\n",strc1); printf("%p\n\n",strc2); short xl = 0x7F, yl=0x80; short strl1 = xl&yl; short strl2 = xl|yl; printf("** short **\n"); printf("%p\n",strl1); printf("%p\n\n",strl2); return(0); } 出力結果 ** int ** 0x0 0xff ** char ** 0x0 0xffffffff ** short ** 0x0 0xff

  • C++のnew演算子について質問です。

    C++のnew演算子について質問です。 以下は関数にポインタを渡して値を得ようしたプログラムです。 ※ディレクティブは省略しています。 void test( int* a ) { a = new int( 100 ); } void main() { int* b; test(b); printf( "%d", *b ); delete b; b = NULL; } このプログラムを実行すると、コンソール画面には100と表示されるかと思っていたのですが、 実際には滅茶苦茶な値と、例外が発生して強制終了しました。 また、関数に渡したポインタのアドレスもNULLとなってしまいます。 そこで以下のようにソースを変更すると正常に100が表示されました。 void test( int** a ) { *a = new int( 100 ); } void main() { int* b; test(&b); printf( "%d", *b ); delete b; b = NULL; } 結果的には目的が達成できたのでいいのですが、なぜこのような動作をするのかが いまいち釈然としません。 new演算子は自動的には破棄されないのではないのでしょうか? 回答の程、よろしくお願いします。

  • C言語における複素数の四則演算について

    複素数の四則演算(a+biとc+diの四則演算)について、for文を用いて表示するプログラムについて、???の部分に何を入れたらよいかわからず、うまく実行することができません。和・差・積・商の計算種別を入れるみたいなのですが、何を入れたらいいのかわかりません。 #include <stdio.h> void fukuso(double a,double b,double c,double d,double *e,double *f,int keisan); int main(void) { double a=4, b=8, c=4, d=3, e, f; int i; for(i=1;i<5;i++){ fukuso(a,b,c,d,&e,&f,???); if(i==1) printf("和演算\n"); else if(i==2) printf("差演算\n"); else if(i==3) printf("積演算\n"); else printf("商演算\n"); printf("e=%f f=%f i\n",e,f); } return (0); } void fukuso(double a1,double b1,double a2,double b2,double *a3,double *b3,int keisan) { if(keisan==1){ *e=a+c; *f=a+c; } else if(keisan==2){ *e=a-c; *f=b-d; } else if(keisan==3){ *e=a*c-b*d; *f=a*d+c*b; } else{ *e=(a*c+b*d)/(c*c+d*d); *f=(-a*d+c*b)/(c*c+d*d); } }

  • プログラミング【代入演算子】

    テキストブックを読んでいます。(数学が大の苦手です) 複合代入演算子についてなのですが、テキスト解説には、 int y = 10; int y += 15; System.out.println("y="+y); というプログラムがあるとします。この場合の実行結果の数字は「y=15」でした。 全く意味がわかりません。 int y = 10というのは[y=10」で、int y = 15 に当てはめると、 10+15=25ではないのですか? どのように計算すれば「u=15」が出てくるのか知りたいです。 恥ずかしながら、宜しくお願いします。

    • ベストアンサー
    • Java
  • インクリメント演算子をprintf文で使うことについて

    ◎1-------------------------------------- #include<stdio.h> int main(void) { int i=0; while(i<=20){ printf("%d\t%d\t%d\t%d\t%d\n",++i,++i,++i,++i,++i); } return 0; } ------------------------------------------ ◎2-------------------------------------- #include<stdio.h> int main(void) { int i=0; while(i<=20){ printf("%d\t%d\t%d\t%d\t%d\n",i++,i++,i++,i++,i++); } return 0; } ------------------------------------------ 以上2つのプログラムについて疑問があるのですが、まず◎1についてですが、実行結果は、 5    4   3   2   1 10   9   8   7   6 15   14   13   12   11 20   19   18   17   16 25   24   23   22   21 以上のようになるのですが、自分の考えでは、「printf("%d\t%d\t%d\t%d\t%d\n",i++,i++,i++,i++,i++);」部分の、一番最初の「++i」から処理が始まり、 1  2  3  4  5      ・      ・      ・ のようになる事を期待したのですが、一番最後の「++i」から処理が始まってしまいました。 次に、◎2についてですが実行結果は、 0   0   0   0   0 5   5   5   5   5 10  10  10  10  10 15  15  15  15  15 20  20  20  20  20 以上のようになりました。「printf("%d\t%d\t%d\t%d\t%d\n",i++,i++,i++,i++,i++);」部分で、iをいったん表示してから、iに1を加算するということで、次のiは1になっており、 4  3  2  1  0      ・      ・      ・ のようにまた一番最後の「i++」から処理され以上のようになると思ったのですが、そうはなりませんでした。 以上、◎1と◎2について何故こうなるのかご回答いただければ嬉しいです。

  • この演算子は何の演算子でしょうか?

    下記のようなjavaコードがあります。 int mode = 1; if (true) mode|= 2; System.out.println(mode); これを実行すると結果は3になりますが、 ここで「|」とは何でしょうか? 恥ずかしいですが、 javaを1年半くらいやってきましたけど こんな演算子初めて見ます。 結果からみると 「mode|= 2」が「mode+= 2」と同じになりますが、 「+=」と「|=」は同じものでしょうか?