• ベストアンサー

この記述の意味を教えてください

jsumとsumが整数、bjがフロートとして、 if (jsum) sum += bj; Accumulate the sum. jsum=!jsum; Change 0 to 1 or vice versa. という計算があるのですが、どういう意味でしょうか? jsumは演算子ではなく、数値なのに括弧で区切ってsumの前にもってくるのは どういう意味があるのでしょうか? != はnot equalという意味ですが、=! はどういう意味なのでしょうか?

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

  • ベストアンサー
  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.5

丁寧に書くと if (jsum != 0) { sum += bj; } /* Accumulate the sum. */ if( jsum != 0 ) { jsum= 0 ; } else { jsum = 1 ; } /* Change 0 to 1 or vice versa. */ ○ if 文は if ( 式 ) 式文 else 式文 というのが正式な文法です。(else以降は省略可能) この式文というのは 式 ; という式と; をセットにした単文と {式文...} と{}で0個以上の単文を括った複文(ブロック)があります。 if(){}else{} が正しい形みたいに参考書には載っていますが、式文が一つだけなら、{}は不要なのです。 ただ、間違えないように 必ず{}でくくる、という自主ルールを適用することが多いです。 なお、for、while等の他の「{}が必要」と思われている文も同様です。 for(i=0;i<10;i++);{printf("hello");} と書いてしまって、1回しか表示されない、等という間違いを犯すことがあります。 ※ 式には「何もない」という「式」も含まれます。よって ; だけ、という式文も「正しい式文」です。 ※ また、{}はforやif等が無くても、単独で使うことができます。 また、 for(i=0;i<10;i++)   printf("hello");   printf("world"); 等と書かれていても、字下げに惑わされてはいけません。これは for(i=0;i<10;i++) {   printf("hello"); } printf("world"); と同じです。 ○ ! 演算子 論理を反転します。 VBで言うなら、 Boolean値に対してのNotにあたります。 Cでは 0 : Boolean のFalse に相当 0以外 : Boolean のTrue に相当 となっています。 また、 !演算子は !a aが真 :0 aが偽 :1 となる演算子です。

その他の回答 (4)

回答No.4

> VB形式で... 1であれば0に、0であれば1にするということで if jsum <> 0 then sum =sum +bj jsum = 1-jsum あるいは、 Dim jsum As Booleanとしておいて 論理値を反転させる if jsum then sum =sum +bj jsum = Not jsum

  • maiko0318
  • ベストアンサー率21% (1483/6969)
回答No.3

if (jsum) sum += bj; Accumulate the sum. jsum=!jsum; Change 0 to 1 or vice versa. sum=sum+bj をjsumの型に入れる。 で、否定ですから、 加算した結果が0なら1、1なら0となります。

KUZUY
質問者

お礼

やはりよく分かりませんので VB形式で書いていただけないでしょうか? よろしくお願い致します。

noname#190876
noname#190876
回答No.2

もっと、四角四面な書き方なら if (jsum != 0) sum +=bj; jsum = ! jsum; ということで、1つめは、キャストではなく、ゼロでなかったら、の意味でつかわれてます。  2つめの方は、! は、論理否定の意味です。  Cでは、真は、ゼロでない。偽は、ゼロの意味を、論理値では、とります。

KUZUY
質問者

お礼

VBと同じ書き方にすると、 if jsum <> 0 then sum =sum +bj jsum = 0 という意味でしょうか? 一応、これでも試してみましたが、思った通りの結果が得られないのですが。

  • maiko0318
  • ベストアンサー率21% (1483/6969)
回答No.1

(jsum) sum について キャストと言って、普通は(int)i のようにその型に入れたように型変換します。 jsumと同じ型にしたいのですね。 jsum=!jsum; について =!ではなく、 !jsum を代入しています。!jsum はビット演算子not(=否定)です。

KUZUY
質問者

お礼

ありがとうございます。 ただ、やはり分からないのですが、 一つ目の方はif文になっていますが、 sumをjsumと同じ型に変換した後に、 sum = sum +bj が正しいかを判定するという意味なのですか? bjがゼロでない限り、この関係が成り立つわけはないと思うのですが。 二つ目の方で http://masudahp.web.fc2.com/cl/kiso/ck0204.html に!の使い方が書かれていますが、 !jsumでゼロという意味なのですよね? となると jsum=0; と何が違うのでしょうか?

関連するQ&A