okinawa

IT勉強メモ

低レイヤ勉強メモ

固定小数点・浮動小数

浮動小数点のメリットはメモリの節約。

0.0000001は8桁必要。

1 * 10^-6 なら「1」と「10」と「-」と「6」の5桁に節約できる。

float型、double型が浮動小数点。

・固定小数点の例

1.5555

314.555

3.141592

浮動小数点の例

0.0000001 * -10

0.000001* 10^-2

1 * 10^-7

100 * 10^-9

floatもdoubleもなぜ誤差が出るの?

・参考

qiita.com

10進数→2進数に変換するときに誤差が出てしまうらしい。

・例 0.3

  1. 10進数「0.3」→2進数「0.010011001100...」という無限小数になる。
  2. floatもdoubleも桁数に上限があるので丸められる。
  3. 誤差が発生。

じゃあなんでBigDecimalは誤差でないん?

小数部を整数として扱っているから。

例えば0.3は

3 × 10^-1 という風に扱う。

3は2進数で「0011」と表せるから誤差は出ない。

nullとは?

nullはメモリに何のデータも入っていないこと。

空文字とは違うのです。

基本だけどたまにわからなくなってしまうので。

// null
String ss = null;

// 空文字
String s = "";

環境変数とは?

OS内のすべてのプロセスが参照できる変数という認識で良さそう。

OSのグローバル変数といったイメージ。

グローバル変数なので、どんなに深い階層からも参照可能。

参照だけでなく変更も可能。

コマンドプロンプト環境変数を試してみよう

f:id:dodosu:20220406210911p:plain
コマンドプロンプト

↑こんな感じでどのディレクトリからでも「cd %環境変数%」で一発で移動できる。

・参考

環境変数って何?初心者向けに簡単に解説 | IT職種コラム

自動型変換の法則

四則演算の時は、基本的にはより精度の高い方に変換される。

12 - 5
# 7
 
12.0 - 5.0
# 7.0

12 - 5.0
# 7.0

ただし、割り算の場合は言語によって結果が異なる

12 / 5
# Java, C++ : 2
# JavaScript, PHP, Python : 2.4
 
12.0 / 2.0
# 6.0

基本型(プリミティブ型)と参照型

※以下はJavaの場合

・基本型

int/char/double/float/byteなど

・参照型

Integer/Stirng/Double/Floatなど

  • 基本型は値が直接入る。
  • 参照型はメモリアドレス(参照値)が入る。

基本型は宣言時に型に応じたメモリ領域が確保される。

参照型はどのくらいメモリ使うのかわからないので、実体はヒープ領域に入る。

スタック領域とヒープ領域と静的領域

  • スタック領域は後入れ先出し。
  • ヒープ領域は必要の都度、割り当てられる。
  • 静的領域はアプリケーション開始時に確保される。

スタック領域には基本型の値、参照型のメモリアドレスが入る。

参照型の実体はヒープ領域に入る。

ちなみにstaticメンバやグローバル変数は静的領域に入る。