質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

1回答

1018閲覧

intについて

miiichat

総合スコア72

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2019/02/08 09:51

編集2019/02/08 13:16
Matrix operator*(const Matrix &m) const { Matrix t; for (int i = 0; i < 16; ++i) } const int j(i & 3), k(i & ~3); t.matrix[i] = matrix[0 + j] * matrix[k + 0] + matrix[4 + j] * matrix[k + 1] + matrix[8 + j] * matrix[k + 2] + matrix[12+j] * matrix[k + 3]; } return t; }

const int j(i & 3), k(i & ~3);
の部分の & は何をしてますか?

---追記---
GLFW による OpenGL 入門(130p)
http://marina.sys.wakayama-u.ac.jp/~tokoi/GLFWdraft.pdf

をやってます。実行できます

#pragma once #include <algorithm> #include <GL/glew.h> #include <cmath> class Matrix { GLfloat matrix[16]; public: Matrix() {} Matrix(const GLfloat *a) { std::copy(a, a + 16, matrix); } const GLfloat *data() const { return matrix; } void loadIdentity() { std::fill(matrix, matrix + 16, 0.0f); matrix[0] = matrix[5] = matrix[10] = matrix[15] = 1.0f; } static Matrix identity() { Matrix t; t.loadIdentity(); return t; } static Matrix translate(GLfloat x, GLfloat y, GLfloat z) { Matrix t; t.loadIdentity(); t.matrix[12] = x; t.matrix[13] = y; t.matrix[14] = z; return t; } static Matrix scale(GLfloat x, GLfloat y, GLfloat z) { Matrix t; t.loadIdentity(); t.matrix[0] = x; t.matrix[5] = y; t.matrix[10] = z; return t; } static Matrix shearXY(GLfloat angle) { Matrix t; t.loadIdentity(); t.matrix[4] = angle; return t; } static Matrix shearYZ(GLfloat angle) { Matrix t; t.loadIdentity(); t.matrix[9] = angle; return t; } static Matrix shearZX(GLfloat angle) { Matrix t; t.loadIdentity(); t.matrix[2] = angle; return t; } static Matrix shearYX(GLfloat angle) { Matrix t; t.loadIdentity(); t.matrix[1] = angle; return t; } static Matrix shearZY(GLfloat angle) { Matrix t; t.loadIdentity(); t.matrix[6] = angle; return t; } static Matrix shearXZ(GLfloat angle) { Matrix t; t.loadIdentity(); t.matrix[8] = angle; return t; } static Matrix rotationX(GLfloat angle) { Matrix t; t.loadIdentity(); t.matrix[5] = cos(angle); t.matrix[6] = sin(angle); t.matrix[9] = -sin(angle); t.matrix[10] = cos(angle); return t; } static Matrix rotationY(GLfloat angle) { Matrix t; t.loadIdentity(); t.matrix[0] = cos(angle); t.matrix[2] = sin(angle); t.matrix[8] = -sin(angle); t.matrix[10] = cos(angle); return t; } static Matrix rotationZ(GLfloat angle) { Matrix t; t.loadIdentity(); t.matrix[0] = cos(angle); t.matrix[1] = sin(angle); t.matrix[4] = -sin(angle); t.matrix[5] = cos(angle); return t; } static Matrix rotate(GLfloat a, GLfloat x, GLfloat y, GLfloat z) { Matrix t; const GLfloat d(sqrt(x * x + y * y + z * z)); if (d > 0.0f) { const GLfloat l(x / d), m(y / d), n(z / d); const GLfloat l2(l * l), m2(m * m), n2(n * n); const GLfloat lm(l * m), mn(m * n), nl(n * l); const GLfloat c(cos(a)), c1(1.0f - c), s(sin(a)); t.loadIdentity(); t.matrix[0] = (1.0f - l2) * c + l2; t.matrix[1] = lm * c1 + n * s; t.matrix[2] = nl * c1 - m * s; t.matrix[4] = lm * c1 - n * s; t.matrix[5] = (1.0f - m2) * c + m2; t.matrix[6] = mn * c1 + l * s; t.matrix[8] = nl * c1 + m * s; t.matrix[9] = mn * c1 - l * s; t.matrix[10] = (1.0f - n2) * c + n2; } return t; } Matrix operator*(const Matrix &m) const { Matrix t; for (int i = 0; i < 16; ++i) { const int j(i & 3), k(i & ~3); t.matrix[i] = matrix[0 + j] * matrix[k + 0] + matrix[4 + j] * matrix[k + 1] + matrix[8 + j] * matrix[k + 2] + matrix[12+j] * matrix[k + 3]; } return t; } };

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

y_waiwai

2019/02/08 10:00

このソースはコンパイルできないでしょ。 きちんとコンパイル、実行できるコードを提示しましょう
cateye

2019/02/08 10:04

各演算子の意味は分かりますか?
guest

回答1

0

ベストアンサー

こんにちは。

const int j(i & 3), k(i & ~3);

は以下と同じ意味です。

const int j = i & 3;
const int k = i & ~3;

このように書けば読み取れるのでは?(元のコードは読みにく過ぎ)

投稿2019/02/08 12:52

Chironian

総合スコア23272

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

miiichat

2019/02/08 13:16

回答ありがとうございます!!! 追記しました。
Chironian

2019/02/08 13:20

回答に記述したコードで理解できないでしょうか? もし、ご存知ないなら、http://www.c-lang.org/operator.html あたりを参考にされると良いと思います。
miiichat

2019/02/08 13:37

&と~はビット演算子で、 jの値は0→1→2→3→0→1→2→3→... ~3は11を反転して00 であってますか? それだとkは0?
Chironian

2019/02/08 14:20

jの値はその通りですね。 int型が32ビットの処理系の場合、~3は11を反転して11111111 11111111 11111111 11111100となる処理系がほとんどと思います。
miiichat

2019/02/08 14:33

本当に助かりました。 ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問