• ベストアンサー

C言語の ^= ついて

C言語初心者です。 ソースを読んでいたんですが、      a[i][j] ^= rk[i][j]; のようなコードが出てきたのですが、^= ってなんですかね? 基本的な様な事ですみませんがお教え願えないでしょうか。 お願いします。

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

  • ベストアンサー
  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.2

通常の二項演算子の ^ ならわかりますか? それの代入形式の演算子です。 具体的には「ビットごとのxor (排他的論理和)」を取る演算子です。

yusetu
質問者

お礼

早急の回答ありがとうございます。 二項演算子に ^があったんですか。知らなかったです。 具体例があり、とても解りやすいです。 ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

  • MrBan
  • ベストアンサー率53% (331/615)
回答No.1

+演算に対する+=演算とか /演算に対する/=演算とかと同列で、 ^演算に対する^=演算なので、 a[i][j] ^= rk[i][j]; この場合の上記は、以下と同等のビット演算です。 a[i][j] = a[i][j] ^ rk[i][j];

yusetu
質問者

お礼

早速の回答ありがとうございます。 とても解りやすく書いていただきありがとうございます。 とてもよく解りました。ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • Fortran と、C言語のデータの受け渡し

    Micro Soft Visual C++ 上で Fortran と、C言語のデータの受け渡しをしたいのですが、例えばC言語でint型のi,jを読み込み、Fortranでi,jを受け取り、その和kを求め、kをC言語に受け渡し、printfでkの値を表示させるプログラムはどんな感じになるんでしょうか? お手数ですがCとFortranのソースコードを教えていただけたらうれしいです。 また、Micro Soft Visual C++ 6.0 と Visual Fortran 6.1a ではできないのでしょうか? 教えてください。

  • C言語の行列の積

    現在C言語を勉強中で2列2列の行列の積のコードを書きたいのですが、 いまいちうまくできません。 int main () {  int i,j;  int M1[2][2] = {{1,2},{3,4}};  int M2[2][2] = {{-1,5},{-2,-2}};  int A[2][2];  for (i=0;i<2;i++)  {   for (j=0;j<2;j++)   {    A[i][j]=0;    A[i][j]+=M1[i][j]*M2[i][j];    printf("%d\t",A[i][j]);   }  printf("\n");  } return 0; } 調べたりしてなんとか書いてはみたのですが理解が浅く、 コンパイルできても違う答えが返ってきます。 どこがどう間違っていますか? また、どのようにしたらうまいコードになりますか? 何卒、よろしくお願いします。

  • C言語

    C言語についてです。 例えば関数中で for(i=0;i<10;i++){ for(j=0;j<10;j++){ A[i][j]=・・・; } } という10×10の配列に1つ1つ値が入っているとします。 このfor文の中で入れた値をfor文の外で使うことは出来ないのでしょうか? 例えば、 for(i=0;i<10;i++){ for(j=0;j<10;j++){ A[i][j]=・・・; } } for(k=0;k<10;k++){ for(l=0;l<10;l++){ B[k][l] = A[i][j]/2; } } みたいな形です。 つまり、A[i][j]の初期化を防ぐ方法はあるのでしょうか? 分かりにくくてすいません。

  • C言語のポインタについて教えてください。

    C言語のポインタについて教えてください。 ・pointer1.c  int main(){   int a;   int *p;   p = &a;     a = 123;   printf("%d", *p);   return 0;  } ・pointer2.c   int main(){ int a[100]; int *p; p = &a[0]; int i; for(i = 0; i < 100; i++) a[i] = i; for(i = 0; i < 100; i++) printf("%d", *p++); return 0; } と二つのソースコードがあるとき、pointer2.cの「p = &a[0]」をpointer1.cのように「p = &a」と書けないのはなぜですか?  また、「&a」は動かすことのできなく、「aを指し示す*p」は動かすことができる変数のようなもの、という認識に誤りはないでしょうか?  宜しくお願いします。

  • C言語 行列の和

    C言語 行列の和 ご覧いただき有難うございます。 久しぶりにC言語の復習をしようと簡単な行列の計算を書いてみたのですが、思うような結果になりませんでした。 昨日から考えていたのですが、どこに間違いがあるのか発見できませんでした。 アドバイス等宜しくお願いいたします。 >環境 OS:Windows XP(32bit),Windows 7(64bit) コンパイラ:Visual Studio C++ 2010 Express (付属のコマンドプロンプ使用) >期待する結果 7 5 7 9 6 8 >出力された結果 7 8 0 0 0 0 >ソースコード #include <stdio.h> int main(void){ int i,j, ma[2][3] = {(1,2,3),(4,5,6)}, mb[2][3] = {(6,3,4),(5,1,2)}, mc[2][3] = {0}; for(i=0;i<2;i++){ for(j=0;j<3;j++){ mc[i][j] = ma[i][j] + mb[i][j]; } } for(i=0;i<2;i++){ for(j=0;j<3;j++){ printf("%3d",mc[i][j]); } putchar('\n'); } return (0); }

  • C言語 極座標変換

    C言語で画像を極座標変換するソースコードをおしえていただけないでしょうか。512*512 32bitグレースケール(float)画像です。C初心者なので難しくて困っています。よろしくおねがいいたします。

  • C言語の

    ものすごく基本的な質問をします。 C言語で作ったソースをVBで使用できるものなのですか? DLLをつかえば可能ということを聞いたことがあるのですが・・・・

  • C言語でのFFTについて

    http://tsuyu.cocolog-nifty.com/blog/2007/03/publi.html に掲載されているVBAのFFTプログラムをC言語に書き換えて 実行しているのですがうまくいきません。 どこが、間違っているか教えてください。 ======以下FFTのサブルーチンソースコード===== void FFT(float Xr[], float Xi[]) { i=0,j=0,k=0,l=0,m=0,n=0,p=0,q=0; n=DN; m = log10(n)/log10(2); Table(c,s); l=n,h=1; for(g=1;g<=m;g++){ l/=2,k=0; for(q=1;q<=h;q++){ p=0; for(i=k;i<=l+k-1;i++){ j=i+l; a=Xr[i]-Xr[j], b=Xi[i]-Xi[j]; Xr[i] = Xr[i] + Xr[j], Xi[i] = Xi[i] + Xi[j]; if(p==0){ Xr[j]=a,Xi[j]=b; }else{ Xr[j] = a * c[p] + b * s[p], Xi[j] = b * c[p] - a * s[p]; } p+=h; } k+=l+l; } h+=h; } j=n/2; for(i=1;i<=n-1;i++){ k=n; if(j<i){ //ビットリバース swap(&Xr[i],&Xr[j]); swap(&Xi[i],&Xi[j]); } k=k/2; while(j>=k){ j=j-k; k /=2; } j = j + k; } }

  • C言語で困っています

    C言語で 100:1 99:2 98:3 .......ループ 1:100とやりたいんですが このやりかたがわかりません goto文などを使うのでしょうか? 一応コードは #include <stdio.h> int main(void) { int i,a; for(i=100; i>=1; i--){ for(a=1; a<=100; a++){ printf("%d:\n",i); break; printf("%d",a); } } return 0; } です まったくこれだと右側が出力されなくてだめみたいです どなたかお知恵をください お願いします

  • C言語について質問です

    C言語について質問です #include <stdio.h> int main(){ int i,j; double a[8][8],p[8][8],x[8]; for(i=0;i<8;i++){ for(j=0;j<8;j++){ a[i][j]=0.0; } } x[8]={0.182289,0.063801,0.125440,0.097210,0.128485,0.080488,0.189581,0.132706}; p[8][8]={{0,25,24,14,19,5,25,10}, {24,0,50,52,15,40,20,11}, {59,18,0,35,37,24,45,12}, {34,3,28,0,22,51,43,3}, {29,31,21,33,0,22,30,15}, {37,7,75,24,38,0,28,31}, {40,8,32,15,16,21,0,21}, {26,28,28,25,24,18,36,0}}; for(i=0;i<8;i++){ for(j=0;j<8;j++){ a[i][j]=1-(x[i]/(x[i]+x[j]))/(p[i][j]/(p[i][j]+p[j][i])); printf("%f\n",a[i][j]); } } } がコンパイル出来ません。コンパイラはvisual stadio2008です。 ご指摘お願いします。