Part 02 Chapter 06(P.93)
<Chapter 06 いろいろなデータ型>の章の終わりのまとめの練習問題
練習問題
問題1
long型の変数をint型変数に代入したいと思います。括弧には何を入れればよいでしょう?
long bignum = 100;
int num = [ ① ] bignum;
➜ datatype java Renshu_1
100
Part 02 Chapter 06(P.93)
long型の変数をint型変数に代入したいと思います。括弧には何を入れればよいでしょう?
long bignum = 100;
int num = [ ① ] bignum;
➜ datatype java Renshu_1
100
Part 02 Chapter 06(P.91)
型変換や算術演算によりデータの一部分が失われる場合があります。
➜ datatype java Renshu_ori_4
1
この結果は1.5だが、int=整数なので切り捨てられて”1”となった。
➜ datatype java Renshu_ori_4
1
少数から整数へのキャストも同様。
➜ datatype java Renshu_ori_4
-727379968
intの最大値(-231 〜231-1)を超える。
浮動小数は10進数ではなく2進数の計算のため、10進数ではっきり書ける数も内部的には微妙な誤差が出る。
➜ datatype java Renshu_ori_5
0.19999999999999996
結果はきっちり0.2にはならない。
意図して切り捨てている場合は問題ないが、意図しないところで精度が落ちたり、値の一部が切り捨てられていると目的の結果が得られなかったり、バグの原因になる。
なお、丸め誤差について、金額計算などで1円の誤差も許されないような場合には、BigDecimalというクラスを利用して計算する。(誤差自体は無くならないが、10進数にするとおかしいというようなことはなくなる)
続きを読む
Part 02 Chapter 06(P.87)
データ型が小さいintから大きなlongへの代入は普通にできる。
➜ datatype java Renshu_ori_3
10
10
逆に大きなlongから小さいintに代入するとコンパイルエラーになる。
➜ datatype javac Renshu_ori_3.java
Renshu_ori_3.java:4: エラー: 不適合な型: 精度が失われる可能性があるlongからintへの変換
int num = bignum;
^
エラー1個
longからintなど、大から小に代入する場合はデータが入りきらない可能性があるのでエラーになる。
大から小へ代入したい場合は、明示的にデータ型を変換する必要がる。この型変換をキャストという。
キャスト演算子
(<データ型>)<値>
➜ datatype java Renshu_ori_3
10
10
「代入しても問題ない」場合、または「入りきらない場合は捨ててよい」場合にキャストを使う
「捨ててよい」というのは少数を整数にに入れる場合に小数点以下を切り捨てるなど、精度が落ちてもいいような場合のこと。
キャストできるのは数値型同士などに限る。(int型の変数をboolean型にキャストするということはできない)
ただしcharについては、用途は文字なのですが内部的には整数として扱われているので整数値とのキャストが可能。
➜ datatype java Renshu_ori_3
10
整数から小数にはキャスト演算子なしで代入可能
➜ datatype java Renshu_ori_3
10.0
少数をキャストした場合、小数点以下は切り捨てられる
➜ datatype java Renshu_ori_3
1
float型(4バイト浮動小数)の変数に1.2など小数リテラルが代入できないのも、この大から小への型変換になるから。
fをつけない小数リテラルはdouble型と見なされるので、精度の大きいdoubleから小さいfloatにそのまま代入できないが、キャストすれば代入することは可能。
➜ datatype java Renshu_ori_3
1.2
ただし、コンパイルが通るという説明のためだけのコードで普通はこう書かない。普通は1.2fと書けばいい。
➜ datatype java Renshu_ori_3
1.2
➜ da
本日ここまで。
続きを読む
Part 02 Chapter 06(P.84)
<double> 特に理由がなければ通常 double を使う。(範囲が広く精度が細かい)
<float> 膨大な個数のデータを扱う時
普通に小数点つきの数字を使う
double型かfloat型かを明示的に示す場合は数字の後ろにd、fをつける。d=double,
f= float
数字の後のd、f(大文字でも可)を省略した場合はdouble型とみなされる。
誤った例:1.2はdoubleリテラルなのでfloatに代入できない
続きを読む
Part 02 Chapter 06(P.82)
私たちは普段「10進数」で数を表記しています。
コンピュータの世界ではこのほか「2進数」「8進数」「16進数」という表記方法を使います。
2進数 |
8進数 |
10進数 |
16進数 |
0 |
0 |
0 |
0 |
1 |
1 |
1 |
1 |
10 |
2 |
2 |
2 |
11 |
3 |
3 |
3 |
100 |
4 |
4 |
4 |
101 |
5 |
5 |
5 |
110 |
6 |
6 |
6 |
111 |
7 |
7 |
7 |
1000 |
10 |
8 |
8 |
1001 |
11 |
9 |
9 |
1010 |
12 |
10 |
A |
1011 |
13 |
11 |
B |
1100 |
14 |
12 |
C |
1101 |
15 |
13 |
D |
1110 |
16 |
14 |
E |
1111 |
17 |
15 |
F |
10000 |
20 |
16 |
10 |
情報数学は正直難しく感じますね...。
プログラマに必要な数学(結城浩)
- 基本的な数学
四則演算(+ − × ÷)、累乗(2^3=2×2×2=8)、位取り記数法(2進法、10進法、16進法)などがある。
- 条件分岐と論理
多くのプログラミング言語では、If文を使って処理の流れを生業します。数学の一分野「論理」を使ってプラグラムをコントロールする。
- 繰り返しと数学的帰納法
大量の情報を処理するために、プログラムを使って「繰り返し」を行う。
- 場合分けと数え上げの法則
たくさんの条件やデータを「場合分け」するとき、プログラマは見落としが絶対に起きないように気をつけなければならない。
- その他
再帰、指数、大数、剰余などがある。
コンピュータが数値を表現する際には、数の分類に合わせたデータ型を使う必要があります。
<整数>小数でも分数でもない-1、0、1のような数のこと
<自然数>0とマイナスを含まない整数のこと。整数のうち自然数と0は「符号なし整数型」で、これに負の整数を加えたものが「符号あり整数型」となる(integer、Long)
<小数と分数>表記方法が異なるだけで同じ数
<分数>整数÷整数で表現できる数
<有限小数>分数を少数に直したときに、割り切れる小数のこと
<循環少数>分数を少数に直したときに、割り切れずにある数列で循環する少数のこと
<有理数>少数(分数)で表される数のこと。(整数、有限小数、無限小数)
<無理数>少数(分数)で表されない数のこと(π、√2)
<実数>有理数と無理数を含む数のこと。「浮動小数点型」「固定小数点型」「十進型(通貨型)」
※実数の上位概念として、虚数を含む複素数、四元数などが存在する
続きを読む
Part 02 Chapter 06(P.80)
種類 |
型 |
用途、説明 |
範囲 |
リテラルの例 |
論理 |
boolean |
真偽値 |
trueまたはfalse |
true、false |
整数 |
char |
2バイトUnicode文字。 |
‘¥u0000’〜’¥uffff’ |
A’、’あ’、’¥u3042
|
byte |
1バイト整数 (2bit) |
-128(-27)〜127(27-1) |
12(10進数)、 |
|
short |
2バイト整数 (16bit) |
-32768(-215)〜32767(215-1) |
||
int |
4バイト整数。(32bit) |
-231 〜231-1 |
||
long |
8バイト整数。intで桁が足りない時はこれ (64bit) |
-263 〜263-1 |
||
浮動少数 |
float |
4バイト浮動小数 |
単精度の浮動小数点数 |
1.2、1.2d、1.2f |
|
double |
8バイト浮動小数 |
倍精度の浮動小数点数 |
|
データ型には「基本データ型(プリミティブ型)」と、のちに出てくる「参照型」がある。
「参照型」には配列やクラスなどが含まれる。
表の「範囲」は、格納できる値の範囲で、範囲がおおきいデータ型はいろんな数んおデータが入るが、1つのデータにつきメモリ容量をたくさん使う。
基本データ型はC言語の時代から続いているそうです。
続きを読むPart 02 Chapter 05
int <ランダムな数> = random.nextInt ( <数の上限> ) ;
ターミナル:
➜ args javac Sample3.java
➜ args java Sample3
ラッキナンバーは6です!
ちなみに Randomクラス をAIで深掘りすると...
Random クラスは疑似乱数ジェネレータ(Pseudo-Random Number Generator, PRNG)を使用してランダムな数字を生成します。これは、完全にランダムではなく、初期シード値に基づいて数列を計算するアルゴリズムによって生成される数値のシーケンスです。
Random クラスによって生成される乱数は疑似乱数であるため、真のランダム性(物理的なランダム性)を必要とするセキュリティ関連の用途には適していません。セキュリティ上の目的で乱数を使用する場合は、java.security.SecureRandom というクラスを使用することが推奨されます。SecureRandom は暗号学的に強い乱数を生成し、より予測が困難です。
...だそうです。
続きを読む