Java – 演算子 – 代入演算子

数値に対する代入演算子

a = b bの値をaに代入する
a += b a = a + bと等価
a -= b a = a ― bと等価
a *= b a = a * bと等価
a /= b a = a / bと等価
a %= b a = a % bと等価

+=など演算と代入を同時に行う演算子を複合代入演算子(compound assignment operator)と呼ぶ。複合代入演算子と対比する場合は、=を単純代入演算子(simple assignment operator)と呼ぶ。

代入演算子の左辺に置けるのは変数のみで、リテラルや式は置けない。

宣言文で使えるのは=のみで、+=などの複合代入演算子は使えない。

文字列に対する代入演算子

a = b aの内容をbに代入する
a += b aの文字列とbの文字列を結合した結果をaに代入する

左辺が変数でなければならない点、宣言文で+=が使えない点は数値に対する場合と同じ。

なお、左辺はString型の変数でなければならないが、右辺はString型のほかchar型でもよい。

 

MySQL – CSVファイルへのエクスポート

コマンド

以下のコマンドで、指定したテーブルのデータをCSVファイルに書きだす。

エラー対応

下記のようなエラーが出る場合。

グローバル変数を確認する。

この場合、表示されたディレクトリーにのみCSVファイルを書き込むことが可能なので、以下のように指定する。

結果のファイルdata.csvは/var/lib/mysql-filesディレクトリー下に保存される。

 

Java – InfinityとNaN

Infinity

実数のオーバーフローはInfinity

実数演算で最大値を超えるような演算をすると、結果がInfinityになる。最小値を下回る演算の場合は-InfinityInfinityのリテラルはない。

Infinityに対する数値の演算結果は直感的

Infinityに対して数値を加減乗除しても結果はInfinity。で、数学の∞と同じ。

数値からInfinityを減じると-InfinityInfinityで割ると0.0。lim[x→∞]と考えると直感的。

Infinity同士の演算

Infinity同士の加算・乗算はInfinityInfinity同士の減算・除算はNaN

Infinityと最大値

Infinityは実数の最大値より大きく、これと等しくはない。

Infinity同士の大小比較

InfinityInfinityと等しい。

Infinityの定数定義

Infinitydouble型とfloat型で定義されていて、それらの定数定義も準備されている。

double型とfloat型で、Infinity-Infinityはそれぞれ等しい。

NaN

計算結果が不定→NaN

実数演算でゼロ同士やInfinity同士の除算結果はNaN (Not a Number)になる。NaNのリテラルはない。

NaNを含む演算はNaN

NaNを含む四則演算の結果は全てNaN

NaN != NaN

NaN同士は互いに等しくない。大小関係は特定できない(>でも<でもない)。

NaNの定数定義

NaNdouble型とfloat型で定義されていて、それらの定数定義も準備されている。double型のNaNfloat型のNaNは等しくない(double型同士やfloat型同士と同じように)。

InfinityとNaN

InfinityNaNの演算結果はNaN

InfinityNaNは互いに等しくない。大小関係は特定できない(>でも<でもない)。

 

Java – プリミティブ型 – 最大値・最小値

概要

数値表現可能なプリミティブ型の最大値・最小値は、それぞれのラッパークラスの定数として定義されている。

WrapperClass.MAX_VALUE
WrapperClass.MIN_VALUE

整数型、実数型、文字型で、それぞれの意味が異なる。

整数型の最大値・最小値

整数型の最大値・最小値は、それぞれのビット長で表現可能な符号付整数の最大値(正数)、最小値(負数)。

byte型

short型

int型

long型

整数型のオバーフロー/アンダーフロー

整数型の最大値を超える演算や最小値を下回る演算をすると、その方の範囲内のビットパターンで表現される値になる。

実数型の最大値・最小値

実数型の最大値・最小値は整数型と異なり、次の値。

最大値
正の数で表現できる最大の数
最小値
正の数で表現できる絶対値が最も小さい数

したがって、負の領域で表現可能な最小値は最大値のマイナス、負の領域で表現可能な絶対値が最小の数は最小値のマイナスになる。

float型

double型

実数型のオーバーフロー/アンダーフロー

実数型の最大値を超える演算をするとInfinityまたは-Infinityになる。

実数型の最小値の絶対値を下回る計算をすると、0.0または−0.0になる。

文字型の最大値・最小値

char型

char型の最小値は文字コード0の文字、最大値は文字コード65535の文字。

文字型のオーバーフロー/アンダーフロー

char型の最大値を超える演算や最小値を下回る演算をすると、それで表現可能な整数型に変換される。

 

Java – 演算子 – 算術演算子

概要

算術演算子はbyte型~long型などの整数や実数(float型double型)を対象とした演算子で、文字型のcharも演算対象になる。

<単項演算子>

+a 正符号、意味はない
-a 負符号、正負反転
++a 参照前インクリメント
a++ 参照後インクリメント
--a 参照前デクリメント
a-- 参照後デクリメント

<二項演算子>

a + b 加算
a - b 減算
a * b 乗算
a / b 除算
a % b 剰余

単項演算子

+:正符号

数値リテラルや数値型変数の前に置く。正数・負数とも符号は変わらず、実質意味を持たない。

-:負符号

数値リテラルや数値型変数の前に置き、符号を反転させる。

符号演算子の連続

単項演算子は交互に連続して書くことができて、その結果は負符号’-‘が偶数回なら’+‘と同じ、奇数回なら’-‘と同じ結果になる。

ただしその中に--++のように連続した符号があると、インクリメント/デクリメント演算子と解釈されてエラーになる。

++/–:インクリメント/デクリメント

  • ++を変数の直前に書くと「変数が評価される前に」変数の内容が1増加する
  • ++を変数の後に書くと「変数が評価された後に」変数の内容が1減少する
  • 演算子と変数の間に空白が入ってもよい。

整数の例

以下の例では、演算子が前置された場合は表示前にインクリメント/デクリメントされ、後置された場合は表示後にインクリメント/デクリメントされる。

また、以下の例では二項演算子の項にインクリメント/デクリメント演算子を使った例。

 

上記の例をnの変化で表すと以下の様になる。

3(→4) + →5 – 5(→4) = 3(4)

実数の例

実数の場合も++で1.0増加、--で1.0減少になるが、計算誤差が出る。

char型の例

char型にも適用可能で、インクリメントで1文字進み、デクリメントで1文字戻る。

二項演算子

四則演算

四則演算は多言語と同じ記号で、整数・実数の関係も同じ。整数同士の演算は整数で桁数が多い方に自動的にキャストされ、2項のうちいずれかでも実数なら結果も実数になる。

+:加算

-:減算

*:乗算

/:除算

%:剰余

abで割った時の剰余(余り)をa % bで与える。実数表現でも整数商に対する剰余が計算される。

除数・被除数が小数部を持つ場合、整数商に対する剰余が実数で計算される。

除数・被除数が負数の場合は、商と剰余の以下の式から考える。

(1)    \begin{equation*} a / b = q, \; a \% b = r \quad \Leftrightarrow \quad a = b q + r \end{equation*}

たとえば以下のように。

(2)    \begin{equation*} -7 \% (-2) = -1 \quad \Leftarrow \quad -7 = -2 \times 3  - 1 \end{equation*}

 

ゼロによる除算

整数除算でゼロで割ると実行時例外となる。剰余も除算を行っているので同じ。

浮動小数点演算の場合にゼロで割ると例外にならず、結果はInfinityとなる。剰余計算の場合は結果はNaN

べき乗

べき乗の演算子はなく、必要ならMathpow()メソッドを使う。

 

MySQL – テーブルのカラムの変更

カラム名の変更

changeの場合

カラムの型の変更

changeの場合

ALTER TABLE … CHANGEで変更するが、新しいカラムでも現在のカラム名を指定する必要がある。

modifyの場合

 

MySQL – テーブルのカラムの削除

1つのカラムの削除

複数のカラムの削除

 

MySQL – テーブルへのカラムの追加

最後に追加

先頭に追加

指定したカラムの後に挿入

 

複数のカラムを追加

 

なお、複数カラムを特定のカラムの後に挿入する場合、ADD (...) afterではエラーになるため、以下のようなクエリーにする。

MySQL – 文字コード・照合順序

データベース

確認

データベースの文字コード設定と照合順序設定の確認方法。いずれも対象のデータベースをUSEで使っている状態で実行。

文字コード

SHOW VARIABLES LIKE 'char%';

照合順序

SHOW VARIABLES lIKE 'col%';

変数で一度に確認

SELECT @@character_set_database, @@collation_database;

変更

ALTER DATABASE test CHARACTER SET 文字コード COLLATE 照合順序;

テーブル

確認

SELECT TABLE_NAME, TABLE_COLLATION FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='テーブル名';

変更

ALTER TABLE test_table
CONVERT TO CHARACTER SET 文字コード
COLLATE 照合順序;

 

MySQL – 文字コードを変更したのにエラー

概要

MySQLで日本語入力対策でロケールや文字コードを設定変更しても、なお日本語入力でエラーが出ることがある。

これは、設定変更前にデータベースやテーブルを作成し、後から設定を変更してもcharacter_set_databaselatin1のような状態で残ってしまうため。

また、他の環境で作成したデータベースをCSVで取り込もうとしたとき、文字コードを合わせたのにcollation(照合順序)が違うと怒られてインポートできないという場合がある。

ここでは、既作成のデータベースやテーブルの文字コード、照合順序を変更する手順をまとめる。

現象

文字コードを変更したのに入力できない

ロケールも変更して

MySQLの文字コードも変更して

再起動もしたのに、日本語が入力できてもデータベースに登録できない。

確認

character_set

MySQLの文字コードを確認するのにUSEでデータベースを指定する前に確認したが、データベース指定後に確認した結果が以下。

既作成のデータベースでは、作成時の文字コード設定が残っている。

データベースの文字コード

既作成データベースの文字コード確認。文字コードがlatin1になっている。

テーブルの文字コード

既作成テーブルの文字コード確認。こちらも文字コードがlatin1になっている。

対応

データベースを作りなおす

文字コードがlatin1でまだデータ未入力の段階で発覚したようなときは、一旦dropでデータベースを消して新たに作りなおせば、全体の文字コードに従ったデータベース、テーブルが作成される。

設定を変更する

既にデータが入力されているときに設定を変更したいときは、データベース、テーブルの別に文字コードを変更する。

データベースの文字コードセットを変更する。

テーブルの文字コードセットを変更する。

これでやっと日本語の入力のエラーがなくなった。