へっぽこびんぼう野郎のnewbie日記

けろけーろ(´・ω・`)! #vZkt8fc6J

電車での席確保で必死になってしまう理由について、知らない人にもわかりやすいように解説してみた

ラッシュの間立ち続けるのと座れるのでは疲労度が根本的に全く違う ―― 都市圏電車通勤の人の声

ラッシュ時に立ち続けるのはしんどい

電車の車両の定員は、あの狭い空間でだいたい140人程度となっている。ラッシュ時にはそこに300人以上が乗る。それが15両ほどあるので、1つの電車に4500人程度が乗っている計算になる。

↓簡単にいうとここに300人が乗る(厳密には違うけど)

http://www.uraken.net/rail/chiho/chihoku/cr75f.JPG

日本を走る鉄道車両図鑑 - 日本の旅・鉄道見聞録 から引用

300人という人数は多いので、人間の頭では微妙に想像しにくい。

中学校や高校でいうなら、最近は30人クラスなので10個のクラス分の人数であることを想像すると、わかりやすくなると思う。

1学年5学級程度の規模の学校の2学年分の人数が押し込められていることになる。

卒業式の在校生練習などを思い出してほしい。あの人数が、この車両1つに入るのだ。狂気としか形容しようがない。

ともかく、狭い車両に300人が乗るということはつらいことだ。まず人間と人間がギュウギュウ詰めで体が痛い。衛生的にヤバそうな人とも接触しなければならない。

そういう状況に300人がなっている。

なのでみんなストレスが異常なことになっている。

こうしたストレスをみんな理性ギリギリのところで抑えている。だから、みんな人を思いやる余裕などない。

そういう状況で、ドカドカ入ってこられたり、ぎゃあぎゃあ騒がれたり、喧嘩が勃発したり、イヤフォンから音漏れがあったり、電話しているやつがいたりして、ストレスはさらに強化される。そういう状況が、1時間、2時間と続く。さらに帰りの電車もある。

これが毎日続くのだ。20日×12でだいたい240日続くのだ。

そしてこう思う。「もうダメだ」と。

しかし人間は、そんな絶望的な状況で活路を見出す。

席に座ることができるエリート

電車には座席が多くある。多くと言っても、だいたい36人程度分しかないが、ともかく座ることができる。300人中36人だけが、座ることを許される。

座れることはそんなに嬉しいのか?もちろん嬉しいにきまっている。

ひとたび座れると、その恩恵は凄まじいものだ。第一に、まず人と接触しなくてもよい。全く見知ってもいないし、わけのわからない、人生において少しも関わらないであろう謎の人たちとの接触を、しなくてもよいのである。

また、座れることによって自分のスペースを確保できる。そのスペースは立っている人の3倍ほどになる。本も気にせず読めるし、スマホを触っていても「迷惑だな。殺すぞ!」と思われない。立っていて死にそうになっている人を横目に、自分は優雅に通勤・通学できるのである。

「席に座れる」ということは、立つことに比べてそれだけ価値が高いのである。

だから必死になる。

「席に座れる」ような場所に住むためには、家賃をたくさん払え

席を確保するための仁義なき戦いは、実は住む家を決める前から決まっている。混雑率が異常な路線周辺の家々は、全然混雑していない家々の家賃と比べて圧倒的に安いのである。

もちろん会社の出社時刻にもよるので、10時に出勤していいようなところだと、混雑する路線でもそうした仁義なき戦いとは無縁でいられる(ただし帰りは除く)

基本的に「ラッシュ時に席確保に必死になるなんてあさましい」という人は、そうした混雑とは無縁でいる。

そういう人は、席に座れるという価値を低く見積もっている。「全く座れない×長時間×毎日」を解消するために、生活レベルが下がってもいいから家賃の高い場所に住んだり、給料は下がってでもいいから東京を出て地方都市に住む人々もいる。

だから、根本的に電車の混雑というのは社会問題である。個人の力で脱出できるとはいえ、それには金がかかる。

言い方は悪いがラッシュが「現代の奴隷船」というのは本当にその通りだとしか言いようがないのである。

それでも席取りの必死さは確かに気持ち悪い

もちろん、席の確保に必死になる様子は見ていて気持ちのいいものではない。

「人間あそこまで落ちたら終わりだ」というような奪い方もある。「妊婦?乗るな!邪魔だ!死ね!」「犬を乗せるな!邪魔だ!帰れ!(盲導犬)」と言う人は犯罪的なレベルで下劣だ。

こういう人たちを擁護する気持ちは一切ない。ただし「妊婦が邪魔」「犬が邪魔」と心の隅でふと思ってしまう気持ちはわからなくもない。

解決方法?

会社にわざわざ通わずに仕事ができるリモートワーク(テレワークともいうらしい)や、出社時間をフレックスタイム制にする方法がある。政府は推進しているけど、そこまで機能しているとは思えない。

学校にしたって何も絶対8時からやらなければいけないわけではない。

もちろん解決するためにはいろいろな問題が山積みだったりする。「うちの会社でそういうのは原理的に絶対無理!」ということもある。

とにかく「席取りごときに必死」という、貴族的立ち位置から単に罵倒するのでは、「自分はそれとは無関係だとする優位性」を示しているだけに過ぎない。

そうではなく、「席取りに必死にならなければいけない都市社会」という問題がただ目の前に堂々と立っており、日本の社会を蹂躙しているだけであるという認識が、ぼくたちには必要なのだと思う。

Macで最近取ったスクショをHTMLimgタグとかにして使う簡単なスクリプト

ぼくはデスクトップに出力されるのでこんなかんじ。 scsho.sh とかいう名前は適当。Macのデフォルトで screencapture というコマンドがあるのでそれだけ注意する。

scsho.sh

f=$(ls ~/Desktop/ | grep "Screen Shot" | tail -n 1)
echo $f
echo "<img src=\"$f\">" | pbcopy
$ sh scsho.sh

これでペタペタできるので便利

「プログラマの三大美徳」とかいうのは基本的に時代遅れで、間違っていて、おかしい

プログラマの三大美徳というのは次の3つだと、Perlを作った人が言ったけど、これを言葉そのままに捉えると全然違うことになる。

・怠惰(Laziness)
・短気(Impatience)
・傲慢(Hubris)

ぼくはこれは間違っていて、次の3つの方がより正しいと思う。

・勤勉
・根気
・責任感

☓怠惰 ○勤勉

ここで言う怠惰というのは「効率をよくするために努力することをいとわない」ということらしいけど、そういうのは「怠惰」という言葉から読み取れない。実際プログラミングでも Lazy は遅延評価の場合に使われる英単語なので、 Laziness がいい場面もあれば良くない場面もある。だいたい「効率をよくするために努力すること」は「怠惰」ではないし、「効率が悪いまま思考せずに続けること」が「努力」でもない。むしろ後者のほうがよほど怠惰であると思う。

こういった考え方はたぶん昔にはそんなにありふれていなかったからだろうけど、今この時代に「怠惰」が大切だと言われてもピンとこない。

昔は「横着すること」と「工夫すること」と「発明すること」と「効率化すること」についてそれほど分別がついていなかったのだと思う。「やりたくないからそういうことするんでしょ」という発想が多くを占めていたと思う。それがいつ頃からか「効率的にできるのにそれを避けて愚鈍な"努力"を続けるのはダメ」というような思想が世の中にだいぶ根付いてきた。それを逆に利用されて「努力なんてバカバカしい」というような風潮もあるけど、怠惰という言葉は、どちらかというとこの風潮に似合う。

昔の話はともかく、勤勉さが重要なのはプログラマでも変わらず、たとえばバグ1つ取るにしても正確に調べてから直すのと「なんとなくここを直せば直るかも」という予測のままに直すのでは全然違う。ここでは前者が「勤勉」で、後者の方が「怠惰」だと思う。

また、良いプログラマになるには仕事以外でも何かしらにコミットすることは不可欠だと思う。それはたとえ楽しみながらやっていても絶対に「怠惰」ではない。

この「怠惰」というのは「ただ勤勉でありさえすればよい」に対して警鐘を鳴らしたものであると思う。なので怠惰という言葉に惑わされるべきではないはずだ。

もちろん「ただ長い間働くこと」は「勤勉」ではないと思う。

☓短気 ○根気

プログラマは短気ではいけない。基本的に根気が要求される。

根気というと「つらいことをじっと耐え忍ぶ」という意味に聞こえてしまうけど、耐えるのではなく、前進しながらあるいは戦いながらやり続けることであって、「つらいことを耐えてさえいればよい・無抵抗であればよい」という意味ではない。

この言葉があげられたときは「処理速度やリソースが余っているのにそのまま放置することへの怒り」というふうに説明されていたらしいけど、それはどちらかというとMOTTAINAIの精神であり、勤勉の範疇に入るように思う。

ただ「短気」と言っただけでは「怒りっぽい人がプログラマに向いている」のように誤解されかねない。別に短気だからプログラマの美徳を備えているとは思わない。どちらかというと根気の方がよほど大切である。

実際「根本的に複雑な問題」を解く場合、根気(それとリソース)が無ければ解くことはできない。短気と根気は両立することもあるけど、間違いなく根気の方が的確な判断をするのに貢献すると思う。

☓傲慢 ○責任感

傲慢とは、ここでは品質にかける自尊心を言うようだが、それは傲慢ではなくて「プライドをかけて責任を持つ」ということに近い。傲慢という言葉によって「実力もないのに驕り高ぶること」が良いように見えてしまう。

実力に見合った自信は別に傲慢ではない。むしろ傲慢による弊害の方が大きい。プライドばかり持っていても困る。いわゆるそれは責任感というやつで、絶対にバグを出さないという精神だと思う。

おわりに

三大美徳の、コアな精神については特に否定しようと思わないけど、それぞれの命名に以前から不満を持っていた。

どうもその中身よりも、目を引く3つのフレーズが独り歩きしていて、

あたかも本当に「怠惰で短気で傲慢であること」が正当化されているように聞こえるからだ。「プログラマだから怠惰なのは仕方ない」とか「プログラマだから短気なのは仕方ない」とか、そういうふうに持っていかれかねない。それは全然、コアな精神とはかけ離れている。実際、リーナスさんも最近普通の意味での短気さと傲慢さを反省したらしく、時代が変わったことを感じる。

3つのフレーズは、たとえば「人生には次の3つが大切だ」と言っておいて

・アイス
・クッキー
・ケーキ
・氷は大切だ。
・優しい心を持った人(クッキー)は大切だ。
・ときどき人生にケーキのような楽しみを取り入れることは大切だ。

のようにするのと同じで、ただキャッチーなだけで、ニュース記事なんかによくある釣りタイトルとも同じだと思う。

ラリーさんはたぶんここまで世界的にこの発言が広まると思ってなかっただろうし、あくまで7つの大罪からとった3つを使った世間に対する皮肉のつもりだったのだろう(憶測)

ただぼくとしては「プログラマの三大美徳である怠惰と短気と傲慢を持った人」というのは、全然怠惰でも短気でも傲慢でもないと思う。だいたいなんでも「この3つが大事」とか言ってアナロジーしようと思えばできる。

偉そうなこと言ってぼくは全然美徳とかないけど、とりあえず不満があったのでこんな記事を書いてみた。

まあ「勤勉!根気!責任感!」と言っても流行らないんだろうけど……

追記(2019/03/13)

なんかご本人も「努力、忍耐、謙遜」と表裏一体だよ!みたいなことを言ってたようだ。わろた。

https://www.oreilly.co.jp/BOOK/osp/OpenSource_Web_Version/chapter10/chapter10.html

新宿駅のわかりやすい説明をしようと試みてみた 〜新宿駅はダンジョンなんかじゃないんだ〜

序文

ネット上では「新宿駅はダンジョン」のように必要以上に恐れられてネタ化されていますが、実際のところ新宿駅でうろちょろするのはそこまで難しくありません。コツさえつかめばそうそう迷子になることはないはずです。

新宿駅は、 JR新宿駅 を中心に衛星写真を使って見ていき、最後に別の会社の路線について学習すると効率的だと思います。

また、そもそも電車の乗り方がよくわからない人は↓の記事もご覧ください。

わらうなんてぜったいにゆるさないぞ電車ネイティブ(田舎から出てきた人への都内での電車の乗り方Tips) - へっぽこびんぼう野郎のnewbie日記

構成

この記事の構成は次のようになっています。

Lv1 東京における新宿の位置からJR新宿駅を把握する
Lv2 JR新宿駅を上から見てJR新宿駅のホームを把握する
Lv3 JR新宿駅から方角を把握する
Lv4 JR新宿駅を上から見て新宿駅周辺のエリアを把握する
Lv5 高低差でみるJR新宿駅
Lv6 JR新宿駅以外の駅を把握する
まとめ

Lv1 東京における新宿の位置からJR新宿駅を把握する

まずはこちらの山手線概略図をご覧ください。

f:id:haruharu1:20190223200525p:plain

新宿駅は、概略図の左側(つまり西側)にあります。山手線は、東京23区を大きく一周する路線です。

実際には山手線はもっと縦に細長いのですが、今回はあまり気にしなくてもいいです。「左にあるぞ」ということだけ知ってください。

そして次に実際のJR新宿駅衛星写真をご覧ください。

f:id:haruharu1:20190223200659p:plain

衛星写真を見ると、JR新宿駅の線路が南北に貫いている(この図では上下に貫いています)ことがわかります。JR新宿駅には、東西(左右)に貫いている線路はありません。南北だけです。また、JR新宿駅は一般的な駅と比べてかなり大きいです。

次に、

f:id:haruharu1:20190223202705p:plain

このオレンジ色のものが甲州街道(こうしゅうかいどう)と呼ばれる道路です。昔からある道で、東京都中央区日本橋(銀座の近く)から山梨県を横断して長野県まで到達する道路です。いろいろ歴史があるみたいですが、とりあえず今回は「JR新宿駅の南側に甲州街道と呼ばれるデカい道路がある」ということを覚えればよいです。

「JR新宿はデカイ・線路が南北を貫いている・南側に甲州街道がある」の3つが今後の説明の基礎になります。

Lv2 JR新宿駅を上から見てJR新宿駅のホームを把握する

JR新宿駅を拡大していくとおもしろいことがわかります。

f:id:haruharu1:20190223203048p:plain

もうちょっと拡大してみます。

f:id:haruharu1:20190223203107p:plain

何がおもしろいかというと、「線路と同様にホームもすべて南北に貫いている」ということです。

当たり前のようですが、これを頭に入れておくと

・渋谷駅から山手線で新宿駅についたのなら、電車の進行方向の左側が西
・池袋駅から埼京線で新宿駅についたのなら、電車の進行方向の左側は東

とかそういったことが把握できるということです。

f:id:haruharu1:20190223203533p:plain

f:id:haruharu1:20190223204136p:plain

これがわからないと方角がわからなくてJR新宿駅に着いた瞬間に迷います。わかっていると特に迷うことなく方角を意識して行動可能です。

Lv3 JR新宿駅から方角を把握する

方角がわかることのメリットはそれだけではありません。JR新宿駅のホームが南北になっていることがわかるとエリアもおのずとわかってきます。

JR新宿駅の構内を表しているこの地図を見てください。ごちゃごちゃしていますが、文字は気にしないでください。この地図は上側を北にするために回転させています。

注目してほしいのは、青色で描かれているホームの部分です(水色ではなくて青色)

このホームというのは、さっき衛星写真で見たホームと同じです。

f:id:haruharu1:20190223204922p:plain

上側(北側)に水色の2本の通路(北通路・中央通路)があり、下側(南側)に赤色の通路が2本あります。4本の通路は、どれも東西に貫いています。(ちなみにこういった広い通路のことを コンコース と言ったりします。豆知識!)

これがわかると、JR新宿駅に着きさえすれば、東とか西とかそういうのは思いのままに移動することができます。

つまり、渋谷駅から山手線で新宿駅についたら、地図を意識しつつ左側に行けば西口に出ることができます。これだけでJR新宿駅で迷う確率はほとんど0になります。

Lv4 JR新宿駅を上から見て新宿駅周辺のエリアを把握する

JR新宿駅を上から見てエリアに分けるとこんな感じになります。 (繁華街) とか書いてあるのは完全にぼくの偏見で、だいたいのイメージです。なので西側にも繁華街はあったりしますが、そういう感じです。北側はないです。

f:id:haruharu1:20190223211058p:plain

詳しく分けるとこんなかんじです。新宿駅についてちょっと詳しい人は、こんな感じで理解していることが多いと思います。ぼくの偏見なので「ちょっと違うんじゃない?」ってこともあると思います。

f:id:haruharu1:20190223212343p:plain

JR新宿駅の出口は↓のような感じになっているので、行きたい場所に応じて移動するといい感じに目的地にたどりつけます。北口はありません。カタカナの出口というのは「サザンテラス口」とかそういうのです。

f:id:haruharu1:20190223230854p:plain

Lv5 高低差でみるJR新宿駅

JR新宿駅の高低差が、新宿をわかりにくくしているひとつの原因ではないかと思っています。

東と西とで、なんとなく雰囲気が違うので、今どこにいるのかわかりにくくなってしまいます。これは高低差があることを知ると混乱しなくなると思います。

JR新宿駅は、南側に行くほど高くなり、北側や東側は低いです。なので、東側の繁華街からJR新宿駅東南口に移動しようとすると階段をのぼることになります。

f:id:haruharu1:20190223232239p:plain

f:id:haruharu1:20190223231706p:plain

また、この高低差から、西側は地上と地下が明確に別れています。JR新宿駅の西側の改札を出ると、地上ではなく地下に出ます。

Lv6 JR新宿駅以外の駅を把握する

今までJR新宿駅をみてきましたが、JR新宿駅の支配している範囲が相当広いので、他の駅に関しては意図的に省いて説明してきました。

なので他の駅の位置を説明します。

まずわかりやすいものから。これらは全部、新宿が終点です。路線たちが新宿に集まっている様子が窺えます。全部ほぼ地上を走っているので、比較的わかりやすいです。

f:id:haruharu1:20190223234613p:plain

東京メトロや都営、それと京王新線のものがこれです。正直こっちはよく乗る人しか把握できてないんじゃないかと思います。きっとこれがダンジョンと言われる多くの原因を作っているはずです。

f:id:haruharu1:20190224000127p:plain

まとめ

基本的にどこにいても方角さえ意識することができれば怖いものはあまりないです。あとは抜け道(というか最短経路)があったりとかいろいろあるんですが、そういうの言っていくとキリがないので省きます。

ただし新宿駅のどこどこのお店に行きたいとかは、スマホなどでどのへんにあるか調べてから行かないとたどり着けないので、どこの方角のどこの階層にあるかを立体的に把握する必要があります。

そんな感じです。初心者向けの説明なので、地下の説明がないのとかはご愛嬌ということで。

とりあえず方角さえわかればなんとかなります。方角がわからなくなると迷います。

いまさらUbuntu15.04を18.04にアップグレードした話

追記

最近は apt-get ではなくて apt を使うそうなので、apt-getとしているところはaptとした方がいいと思います(・ω・)

経緯

家でひさしぶりにLinuxを触ろうとしてUbuntuを立ち上げた。それで sudo apt-get install などをしていたら、エラーが出ていた。

sudo apt-get update としたら、リポジトリ404 Not Found になっていて見つからなかったので、びっくりして調べたらサポートが終了していた。そりゃもう4年も前ですもんね。そして自分がインストールしていたものが 15.04 だったことにびっくりした。当時の最新版を入れたかったらしい。

アップグレード

それで sudo do-release-upgrade -d とすると、 新しくリリースされたものはありません と言われた。そ、そんなわけがあるかーー!

どうもサポートが切れたことによっていろいろなことができなくなっていたようだ。わろた。

そこで、 /etc/apt/sources.listvivid (15.04の意味) となっているところを xenial (16.04 LTS) にかえてみた。いきなり 18.04 に上げるのは「15.04から18.04に上げるやつとかそんないないだろうからエラーとか出たらめんどくさいし……」と思ったので躊躇した。 16.04 のEnd of Lifeが2021年4月までということもあってリポジトリが残っていたので 16.04 にした。一度 16.04 にあげさえすれば、たぶん正規の方法で 18.04 まで上げられると思うという思いもあった。

それでファイルを変更したあと

$ sudo apt-get update
$ sudo apt-get dist-upgrade

などをすることに。うまく動いている。さすがLTS!なんともないぜ!

dist-upgrade の様子を見ていると、さまざまなものが上書き展開されていてとてもおもしろい。これがここ4年でのソフトウェアの更新かと思うとこみあげてくるものがある。ただ長かったので途中で飽きた。稀にyesno聞いてくるのでよく読んでyを選択。

ものすごく時間がかかった後、バージョンが上がったことを確認してPCを再起動。そのままアップグレードを続行して不具合とか出たらやってらんねえので再起動して16.04で普段使われているだろうプロセスたちを立ち上げるたかった。

その後 sudo do-release-upgrade -d をして、 bionic (18.04 LTS)にさらにアップグレード。正直あまり 16.04 を経由した意味はなかったかもしれないと思っているけど、うまくいったからそう思っているだけかもしれない。

16.04→18.0415.04→16.04 よりも早くインストールなどが終わった。

18.04はUIなども変わっていて新鮮な気持ちだ。

おわりに

ともかくLinuxを雑に触れる環境がまた整ったので、これでカーネルモジュールなど作って遊びたいと思う。あとメモリもCPUもしょぼいので、そのうち換装したい。CPU高いなぁ

2の補数と1の補数についての混同と混乱について

ノイマンが書いた本を読んでたら減算器の話について出てきて思い出した。

そういえば1の補数っていうのややこしいなと。なのでブログに書いておくことにした。

要求知識

最低限理解に必要な知識として

・ビット
・2進数、10進数
・コンピュータは電子回路で動いていることを知っている

などを要求しています。

突如出現! 1の補数!

2の補数 について説明されるとき、まず補数とはなんぞやという話から始まって、たいてい次のような話が出てくるように思う(読み飛ばしていいです)

補数というのは足すと繰り上がりが発生する数のことだ。
たとえば10進数のとき、3に対する10の補数は7である。4に対する10の補数は6だ。
3に対する9の補数は6だ。
2進数で考えてみよう。1に対する2の補数は1だ。1に1を足したら10になるからだ。0に対する2の補数は0だ。
1101に対する2の補数は0011だ。

なぜこんな補数という概念ができたかというと足し算を使って引き算ができるからだ。
どういうことだろう。1101に0011を足すと10000になるということはビットを反転させると引き算になるからだ。それに最近コタツがほしいと思っている。

1101のビットを反転すると0010になる。ここに1を足すと0011という数字が得られる。つまり10000-1101は、1101をビット反転してそこに1を足したものと同じというわけだ。
この1101のビットを反転してあと1を足せば繰り上がる数(この場合は0010)のことを1の補数という。

こんな感じでなんとなく煙に巻かれる。

ふつうの人類はこのように考える。

しかしそれにしても 1の補数 とはなんだろう。

補数は繰り上がる数 とか言ってたな。

足すと繰り上がりが発生する数? 1進数? 1進数の繰り上がり?

2の補数とは?

というふうに考えて頭がパンクしてしまうはめになる。

本には詳しく書かれておらず、突然「1の補数を使います」とさっきの意味の補数っぽい感じでババンと用語が出現し、あとは「ま、まあわかるよね」というような感じでスルーされている。

こうしてコンピュータは難しいと言われ初心者は死んでいった。

2の補数と1の補数についての驚きの事実

そして、おどろきの事実はこうだ。

2の補数は足すと繰り上がる数だけど、1の補数は足してもべつに繰り上がらない。

補数って言ってるけどおんなじ意味の補数ではない。

メロンパンとジャムパンにおけるパンの違いぐらい違うものだと思っていい。

(メロンパンとジャムパンのそれぞれのパンの部分は、パンはパンでも、全く同じ種類のパンではないという意味)

結局、2の補数と1の補数とは何か。

・足すと2^nになる数を2の補数と呼ぶ。
・足すと2^n-1になる数を1の補数と呼ぶ。

つまり2の補数から1を引くと1の補数になる。まじでそれだけである。

ナ、ナンダッテー!? ソレダケカァ!?

補数という言葉に疑問を持つと死ぬ。そういう罠だったのだ。

厳密には

2の補数 = 2進法における基数の補数(radix complement)
1の補数 = 2進法における減基数の補数(diminished radix complement)

という。

「俺らコンピュータの勉強やってるんだから2進数における減基数の補数って言うのだるいし、2進数なのは当たり前だし今後は1の補数って呼ぼうぜ」
「おっ、そうだな。100に対する1の補数は11!」

くらいに略された言葉だ。

それから「1の補数」は英語では ones' complement で、厳密には「1たちの補数(足すと全部1になるから)」であり、「2の補数」は two's complement だ。

one's complement ではないので注意!!!(でも one's complement って書く人の方が多いよ!おまえらふざけんなよ)

いったい、これによってどのくらいの人数の人が苦しみを味わったのだろうか。

ともかく、 2の補数と1の補数は、メロンパンとジャムパンくらい違う という気付きは大事だ。

ちなみに 6に対する10の補数は4 と言うべきところを 6の補数は4 というように間違って言う人もいる。適当なことを言うんじゃねえ。

補数の重要性

それでまあ、この二種類の補数という概念がだいじなのは「足し算を使って引き算したいから」という欲求があったからだ。

その昔、初期の頃、人類は電子回路では足し算しかできなかった。足し算しかできないように作っていたので、足し算しかできなかった。

そこで頭のいい人が「足し算使って引き算すればいいじゃん」と考えた。

これはすごいことだ。足し算しかできなかったら、ふつうの人間は「足し算しかできねえのかよ」と言いつつも、足し算にしか使わないし、もしかしたら「コンピュータとかいうの使うより人間が計算した方が早いじゃん。科学者はバカ」とか言い出すものだ。

なのでこれは「仕事ができないやつを組み合わせて仕事が回るようにする」くらいの発想だ。

それで、まあそういう寓話は置いといて、その人は引き算もしたがっていた。

そもそも引き算というのは何をしているのか。

2進数だと 1 + 1 = 10 だから 10 - 1 = 1 で、 10 + 1 = 11 だから 11 - 10 = 1 だ。足し算の逆のことをしている。

ところでコンピュータを作るために色んな論理回路が必要になる。論理回路にはNOT回路とかいうものがあって、これはビットを反対にするものだ。これを使って引き算が作れる。

01 のビットを反転させると 10 になる。反転させたあと1を足して、

10 - 110 + 10 + 1 のように書き換えてしまう。

そして 101 という答えが出るけど、3桁目の1は消して 01 というふうになる。

こうすると 10 - 1 = 1 ができたことになる。なぜか。

10 - 110 + (11 - 1) + 1 - 100 と等価だからだ。ビット反転という操作は 11 - 1 という部分に相当する。そして3桁目を脱落させた操作は、 -100 に相当する。

このようにして m - ncutOverflowedOne(m + invert(n) + 1) と等価というふうにできる。

そんなかんじです。いやあ補数って便利だなあ。

なんか煙に巻いてる気がするけど、このビット反転(invert)が要は1の補数を求めてる箇所です。そのあと1の補数に +1 して 2の補数を求めてます。

トランジスタでも買ってきて減算器を作ればすごいわかるようになると思います。

そのうちつくったら追記します。

音圧について、dBが変わると音の大きさがどのくらい変わるか早見表作ってみた

例: 48dBの洗濯機の脱水音と42dBの洗濯機の脱水音は、差が6dBなので、2倍音の大きさが違う

(=42dBの洗濯機を2つ並べて脱水すると48dBの洗濯機の脱水の音と同じ大きさになる)

簡易版

dB 比率
+20 10倍
+15 6倍
+10 3倍
+6 2倍
+3 1.4倍
+2 1.25倍
+1 1.1倍
0 1倍
-1 90%
-2 80%
-3 70%
-6 50%
-10 30%
-15 20%
-20 10%

詳細版

dB 比率 近似値
+20 10倍 10
+19 9倍 8.912509381
+18 8倍 7.943282347
+17 7倍 7.079457844
+16 6倍 6.309573445
+15 5.6倍 5.623413252
+14 5倍 5.011872336
+13 4.5倍 4.466835922
+12 4倍 3.981071706
+11 3.5倍 3.548133892
+10 3倍 3.16227766
+9 2.8倍 2.818382931
+8 2.5倍 2.511886432
+7 2.2倍 2.238721139
+6 2倍 1.995262315
+5 1.8倍 1.77827941
+4 1.6倍 1.584893192
+3 1.4倍 1.412537545
+2 1.25倍 1.258925412
+1 1.1倍 1.122018454
0 1倍 1
-1 90% 0.8912509381
-2 80% 0.7943282347
-3 70% 0.7079457844
-4 60% 0.6309573445
-5 56% 0.5623413252
-6 50% 0.5011872336
-7 45% 0.4466835922
-8 40% 0.3981071706
-9 35% 0.3548133892
-10 30% 0.316227766
-11 28% 0.2818382931
-12 25% 0.2511886432
-13 22% 0.2238721139
-14 20% 0.1995262315
-15 18% 0.177827941
-16 15% 0.1584893192
-17 14% 0.1412537545
-18 13% 0.1258925412
-19 11% 0.1122018454
-20 10% 0.1

おまけ

計算方法は 10^(【dBの差】/20) による。

比率は概数。なるべくキリのいい数字にしようとしているので恣意的。

簡易版は、さらに覚えやすい数字にしてあるのでなるべく正確に把握したい場合は詳細版をおすすめしたい。