読者です 読者をやめる 読者になる 読者になる

倭マン's BLOG

くだらない日々の日記書いてます。 たまにプログラミング関連の記事書いてます。 書いてます。

いまさら!? ビット演算 ~論理演算編~

Java

昨今、若者のビット演算離れが叫ばれてる、かどうかは知りませんが、ちょっとビット演算で気になったことがあったので復習も兼ねてビット演算をあれこれ試してみました。 ビット演算の解説は世に山のようにありますが、実際自分であれこれ書いてみないとどうもシックリこないところがあるので、山に砂を積んでみました。

Java で演算子が定義されている

  • 否定(ビット反転) ~
  • 論理積 &
  • 論理和 |
  • 排他的論理和 ^

を見ていきます。

準備

まずは、以降のサンプルコードで使う定数やメソッドの定義をしておきましょう。 この記事では int 値のビットごとの論理演算を見ていきますが、int 値を2進数の文字列で表す際に0と1だと見にくいので、0の代わりにアンダーバー (_) を使うことにします。

まず、2進数の数値を表した文字列を int 値に変換する b(String) メソッドを定義しておきましょう(使い方は次節):

    /** ビット文字列を int 値に変換するメソッド。 0の代わりにアンダーバー (_) を使える。 */
    static int b(String s){
        return Integer.parseUnsignedInt(s.replaceAll("_", "0"), 2);
    }
  • ここでは Integer#parseUnsigindInt() を使っていますが、これは最上位のビット(符号ビット)も1, 0(_) で書けるようにするためです。

また、32ビット全てを書くとコードが見づらくなるので、基本的に下位8ビットのみを明示して上位24ビットは全て0もしくは1となっている定数を使うことにします。

    static final String ___ = "________"+"________"+"________";  // 24個の0
    static final String lll = ___.replaceAll("_", "1");          // 24個の1

変数名の「lll」はアルファベットのエル3つです。 「___」は別になくてもいいんですが、負の数を扱うときに「lll」がいるので、その対比で用意しています。

最後の準備として、下位5ビットのみが1の定数を定義しておきましょう:

    static final int mask = b(___+"___11111");  // 下5ビットのマスク (= 31)

これはビット演算と併せて使うとフィルタの役目をします。

整数値と負符号

では、前節で定義したメソッドや定数の使い方の確認も含めて、int 値とその二進数表現を見ていきましょう。 ついでに負の数や負符号についても確認しておきます.

まずは前節で定義した b() メソッドと定数「__」, 「lll」の使い方:

// b() メソッドで2進数表現(_ は0と同じ)を int 値に変換する
int x = b("1_11_1_");  // == 1011010
assert( x == 90 );

// 32ビットを全指定
int y = b(___+"_1_11_1_");  // 「___」は0が24個
assert( y == 90);

int z = b(lll+"1_1__11_");  // 「lll」は1が24個
assert( z == -90 );

// その他、いくつかの値
assert( b(___+"________") == 0 );  // 全てのビットが0なら値は0
assert( b(___+"_______1") == 1 );
assert( b("_1111111"+lll) == Integer.MAX_VALUE );  // == 2^31-1

assert( b(lll+"11111111") == -1 );  // 全てのビットが1なら値は-1
assert( b("1_______"+___) == Integer.MIN_VALUE );  // == -2^31
  • Java では int 値は32ビットで表され、そのとりうる値は  { -2^{31} } 以上  { 2^{31}-1 } 以下です。 int 値の最大値と最小値は、それぞれ Integer.MAX_VALUE, Integer.MIN_VALUE として Integer クラスに定義されています

最上位のビットは符号を表し(符号ビット)、0ならその数は正もしくは0、1ならその数は負となります。 符号ビットを0から1に変えれば、値は  { 2^{31} } を引いたものになります。

負符号
負符号はビット演算には含まないと思いますが、後で少し使うのでビットレベルでどういう変換になっているのか見ておきましょう。

正の数に負符号をつけると、全ビットを反転して1を加えた負の数になります。 逆に負の数に負符号をつけると、1を引いて全ビットを反転した正の数になります。

int x = b(___+"_1_11_1_");
int y = b(lll+"1_1__11_");
assert( -x == y );
assert( -y == x );

// 1と-1
int  one = b(___+"_______1");
int _one = b(lll+"11111111");  // == -1
assert( -one == _one);
assert( -_one == one);

// Integer.MAX_VALUE (== 2^31-1)
int  max = b("0"+lll+"1111111");
int _max = b("1"+___+"______1");
assert( -max == _max);
assert( -_max == max);

// 0 と Integer.MIN_VALUE
assert( -0 == 0);
System.out.println( -Integer.MIN_VALUE );

「-0」は0、「-Integer.MIN_VALUE」は正しい値を返しません。

マスク
下位 p ビットのみが1の int 値は、論理演算と併せて使うと、その p ビット(もしくはそれ以外のビット)のフィルタとして使えます。 一般に下位 p ビットのマスクの値は  { 2^p - 1 } です。 p = 0 の場合は0、p = 31 の場合は Integer.MAX_VALUE、p = 32 の場合は -1 です(p = 0, 32 の場合をマスクというのか分かりませんが):

// 準備で定義した mask フィールド
assert( mask == b(___+"___11111") );
assert( mask == 31 );  // == 2^5-1

p の値によっては「0xFF」(=255, 8ビットのフィルタ)のように16進数のリテラルで初期化することが多いようです。

否定 NOT (~)

では Java に定義されている論理演算をするビット演算子を見ていきましょう。 まずは否定 (NOT) もしくはビット反転の「~」。 これは負符号のように前置演算子で、各ビットを反転します:

int x = b(___+"_1_11_1_");  //  90
int y = b(lll+"1_1__1_1");  // -91

assert( ~x == y );
assert( ~90 == -91 );

assert( ~y == x );
assert( ~-89 == 90 )

// いくつかの値
assert(  ~0 == -1 );
assert( ~-1 ==  0 );
assert( ~Integer.MAX_VALUE == Integer.MIN_VALUE);
assert( ~Integer.MIN_VALUE == Integer.MAX_VALUE);

ビット反転は符号反転と値が1だけズレるので注意。 ビット反転と符号反転は以下のように関係しています:

  { \displaystyle\begin{align*}
  -x =
    \begin{cases}
      \sim x+1 & (0 < x < 2^{31}) \\
      x & (x = 0) \\
      \sim (x-1) & (-2^{31} < x < 0)
    \end{cases}
\end{align*}}

ビット反転は負符号と同様、2度施すと元に戻ります:

// 任意の int 値 x について
assert( ~~x == x );

下位 p ビットが1のマスクにビット反転を施すと、上位 (32-p) ビットが1のマスクになります:

// 準備で定義した mask (下位5ビットのマスク)
assert(  mask == b(___+"___11111") );
assert( ~mask == b(lll+"111_____") );

論理積 AND (&)

次は二項演算子の論理積 (&am;)。 1ビットの真理値表は以下で与えられます:

AND 0 1
0 0 0
1 0 1

int 値に対する & 演算子はビットごとの論理積を計算します:

int x = b(___+"_1_11_1_");
int y = b(___+"___1__11");
int z = b(___+"___1__1_");  // 演算結果
assert( (x & y) == z );

また、論理積は可換かつ結合的です:

// 任意の int 値 x, y, z に対して
assert( (x & y) == (y & x) );
assert( ((x & y) & z) == (x & (y & z)) );

これ以上に知っておかなければならない性質は特にないと思いますが、いくつかの特別な場合を見ていきましょう。

自身との AND
自身との論理積は常に自分自身です:

// 自身との AND
int x = b(___+"_1_11_1_");
int y = b(___+"_1_11_1_");   // == x
int z = b(___+"_1_11_1_");  // 演算結果
assert( (x & y) == z );

// つまり
assert( (x & x) == x );

(0, 0) のペアもしくは (1, 1) のペアしかないので当然ですね。 逆に、自身の否定(ビット反転)との論理積は常に0となります:

// 自身の否定との AND
int x = b(___+"_1_11_1_");
int y = b(lll+"1_1__1_1");  // == ~x
int z = b(___+"________");  // 演算結果
assert( (x & y) == z );

// つまり
assert( (x & ~x) == 0 );

1と0が逆転してるので、論理積をとると常に0になりますからね。 さて、ちょっと変わった性質として、自身の符号反転(負符号をつけたもの)と論理積をとると、もとの int 値で最下位のビットだけが1となった int 値を返します:

// 自身の符号反転との AND
int x1 = b(___+"_1_11_1_");
int y1 = b(lll+"1_1__11_");  // == -x1
int z1 = b(___+"______1_");  // 演算結果:x1 の最下位のビットのみが1
assert( (x1 & y1) == z1 );

int x2 = b(___+"_1_11___");
int y2 = b(lll+"1_1_1___");  // == -x2
int z2 = b(___+"____1___");  // 演算結果:x2 の最下位のビットのみが1
assert( (x2 & y2) == z2 );

ちなみに、 Integer#lowestOneBit() メソッドはこの結果と同じく、引数の最下位のビットのみが1の int 値を返します:

assert( (x & -x) == Integer.lowestOneBit(x) );

マスクとの AND
準備の箇所で定義した mask は、論理積と一緒に使うとフィルタとして機能します:

// マスクとの AND
int x = b(___+"_1_11_1_");
int y = b(___+"___11111");  // == mask
int z = b(___+"___11_1_");  // 演算結果
assert( (x & y) == z );

// 特別な場合
assert( (x &  0) == 0 );  // 0 は下位0ビットのマスク?
assert( (x & -1) == x );  // -1 は下位32 ビットのマスク?

下位 p ビットのマスクと論理積をとると、下位 p ビットだけをそのまま取り出し、上位 (32-p) ビットは全て 0 になります。 ちょっとどうでもいい話ですが、int 値 x と下位 p ビットのマスクの論理積をとると、結果は  { x\,\,\textrm{mod}\,\,2^p } となります。

/**
   * 剰余演算子の % ではなく、数学の mod での剰余。
   * 除数である第2引数 m は正でなくてはならず、結果は [0, m) の範囲の int 値となる。
   */
static int mod(int n, int m){
    if(n >= 0){
        return n % m;
    }else{
        int r = n % m;
        if(r == 0) return 0;
        else       return r + m;
    }
}

assert( (x & mask) == mod(x, mask+1) );  // mask (== 31) は下位5ビットのマスク

マスクの否定(ビット反転)との論理積は、先ほどと逆に、上位 (32-p) ビットのみを取り出すフィルタとして機能します:

// マスクの否定との AND
int x = b(___+"_1_11_1_");
int y = b(lll+"111_____");  // == ~mask
int z = b(___+"_1______");  // 演算結果
assert( (x & y) == z );

// 上で定義した mod() メソッドを使うと以下のようにも書ける
assert( (x & ~mask) == (x - mod(x,mask+1)) );

マスクとそのビット反転がそれぞれ下位 p ビットと上位 (32-p) ビットを抜き出すフィルタの役割をすることを念頭におくと、以下のような恒等式が成り立つことがわかります:

// 任意の int 値 x について
assert( ((x & ~mask) & (x & mask)) == 0 );
assert( ((x & ~mask) | (x & mask)) == x );
assert( ((x & ~mask) ^ (x & mask)) == x );

後でみる論理和、排他的論理和も入っちゃってますが。 mask は「準備」の箇所で定義した下位5ビットのマスクでなくてもかまいません*1

論理和 OR (|)

次は論理和の OR (|)。 1ビットでの真理値表は以下のようになってます:

OR 0 1
0 0 1
1 1 1

int 値同士の論理和も、論理積と同じくビットごとの論理和として計算されます:

int x = b(___+"_1_11_1_");
int y = b(___+"___1__11");
int z = b(___+"_1_11_11");  // 演算結果
assert( (x | y) == z );

論理和も可換で結合的です:

// 任意の int 値 x, y, z に対して
assert( (x | y) == (y | x) );
assert( ((x | y) | z) == (x | (y | z)) );

また、いくつかの特別な値について計算していきましょう。

自身との OR
自身との論理和は、論理積と同じく自分自身と同じです:

// 自身との OR
int x = b(___+"_1_11_1_");
int y = b(___+"_1_11_1_");  // == x
int z = b(___+"_1_11_1_");  // 演算結果
assert( (x | y) == z );

// つまり
assert( (x | x) == x );

自身の否定(ビット反転)との論理和は全てが1、つまり-1となります:

// 自身の否定との OR
int x = b(___+"_1_11_1_");
int y = b(lll+"1_1__1_1");  // == ~x
int z = b(lll+"11111111");  // 演算結果
assert( (x | y) == z );

// つまり
assert( (x | ~x) == -1 );

論理積の場合と同じく、自身の符号反転(負符号をつけたもの)との論理和は最下位ビットに関連する値を返します:

// 自身の符号反転との OR
int x1 = b(___+"_1_11_1_");
int y1 = b(lll+"1_1__11_");  // == -x
int z1 = b(lll+"1111111_");  // 演算結果:x1 の最下位のビットより下のビットのみが0
assert( (x1 | y1) == z1 );

int x2 = b(___+"_1_11___");
int y2 = b(lll+"1_1_1___");  // == -x2
int z2 = b(lll+"11111___");  // 演算結果:x2 の最下位のビットより下のビットのみが0
assert( (x2 | y2) == z2 );

// 任意の int 値 x に対して
assert( (x | -x) == -Integer.lowestOneBit(x) );

自身と符号反転との論理和は、最下位のビットより下のビットのみが0で、最下位ビット以上のビットが1の int 値が返されます。 これは -Integer.lowestOneBit() に等しい値です。

マスクとの OR
次はマスクとの論理和。 論理積が0で切り捨てたのに対して、論理和は1で埋めるフィルタのような感じです。 切り捨てる場所と埋める場所が逆というのもありますが。 下位 p ビットのマスクとの論理和は、下位 p ビットを1で埋めて、上位 (32-p) ビットをそのまま保持します:

// マスクとの OR
int x = b(___+"_1_11_1_");
int y = b(___+"___11111");  // == mask
int z = b(___+"_1_11111");  // 演算結果
assert( (x | y) == z );

// つまり
assert( (x | mask) == ((x & ~mask) | mask) );

// いくつかの特別な場合
assert( (x |  0) == x );
assert( (x | -1) == -1 );

マスクの否定(ビット反転)は、逆に上位 (32-p) ビットを1で埋めて、下位 p ビットをそのままにします:

// マスクの否定との OR
int x = b(___+"_1_11_1_");
int y = b(lll+"111_____");  // == ~mask
int z = b(lll+"11111_1_");  // 演算結果
assert( (x | y) == z );

// つまり
assert( (x | ~mask) == (~mask | x & mask) );

論理積のときと同じように、任意の x と任意のマスク*2 mask に対して mask, ~mask とそれぞれ論理和をとったものに以下のような関係があります:

// 任意の int 値 x に対して
assert( ((x | ~mask) & (x | mask)) ==  x );
assert( ((x | ~mask) | (x | mask)) == -1 );
assert( ((x | ~mask) ^ (x | mask)) == ~x );

排他的論理和 XOR (^)

さて、最後は排他的論理和の XOR (^)。 真理値表は以下のようになっています:

XOR 0 1
0 0 1
1 1 0

名前の通り OR に似ていますが、両方1のときに0となります。 これは、2進数の足し算で 1+1 = 10 の結果の繰り上がり分を捨てるイメージですね。  { \textrm{mod}\,\,2 } の計算と言ってもいいでしょう。  排他的論理和の結果は、2値が同じなら0、異なるなら1とも言えます。

int 値同士の排他的論理和は、やはりビットごとの排他的論理和を行うだけです:

int x = b("_1_11_1_");
int y = b("___1__11");
int z = b("_1__1__1");  // 演算結果
assert( (x ^ y) == z );

排他的論理和も可換で結合的です。 結合性は一見成り立っているかどうかが分かりにくいかも知れませんが(自分だけ?)、上記の2進数の和であることを思い起こせば納得がいくかと思います:

// 任意の int 値 x, y, z に対して
assert( (x ^ y) == (y ^ x) );
assert( ((x ^ y) ^ z) == (x ^ (y ^ z)) );

自身との XOR
排他的論理和は2値が同じなら0となるので、自身との排他的論理和は常に0となります:

// 自身との XOR
int x = b(___+"_1_11_1_");
int y = b(___+"_1_11_1_");  // == x
int z = b(___+"________");  // 演算結果
assert( (x ^ y) == z );

// つまり
assert( (x ^ x) == 0 );

逆に、自身の否定(ビット反転)との排他的論理和は全ビットが1となります:

// 自身の否定との XOR
int x = b(___+"_1_11_1_");
int y = b(lll+"1_1__1_1");  // == ~x
int z = b(lll+"11111111");  // 演算結果
assert( (x ^ y) == z );

// つまり
assert( (x ^ ~x) == -1 );

自身の符号反転との排他的論理和は、最下位以下のビットが0となり、最下位より上のビットが1となります:

// 自身の符号反転との XOR
int x = b(___+"_1_11_1_");
int y = b(lll+"1_1__11_");  // == -x
int z = b((lll+"111111__");  // 演算結果
assert( (x ^ y) == z );

// つまり
assert( (x ^ -x) == (x | -x) << 1 );  // (x | -x) の結果を右へ1ビットずつずらしたもの

最後の行でビットシフトを行う << 演算子を使ってますが、これは次回に(別に難しくないけど)。 この結果は「(x | -x) - (x & -x)」とも書けますが、まぁ大した意味はなさそうです。

マスクとの XOR
次はマスクとの排他的論理和。 これは論理積や論理和の場合とちょっと違って「一部分を反転し、それ以外の部分をそのままにする」というフィルタになります:

// マスクとの XOR
int x = b(___+"_1_11_1_");
int y = b(___+"___11111");  // == mask
int z = b(___+"_1___1_1");  // 演算結果
assert( (x ^ y) == z );

下位5ビットのマスクと排他的論理和をとると、下位5ビットは反転され、上位27ビットはそのままになっています。 ちょっと分かりにくいかも知れませんが、常に以下が満たされます:

// 任意の int 値 x に対して
assert( (x ^ mask) == ((x & ~mask) | (~x & mask)) );

mask が下位 p ビットのマスクとすると、「x & ~mask」は上位 (32-p) ビットをそのまま、下位 p ビットを0 にします。 また、「~x & mask」は x の反転に関して、下位 p ビットをそのまま、上位 (32-p) ビットを0にします。 これらの論理和をとると、上位 (32-p) ビットはそのまま、下位 p ビットは反転する、という結果になります。

ちなみに、特別なマスク?の場合の値は以下のようになります:

// 特別な場合
assert( (x ^ 0) == x );
assert( (x ^ -1) == ~x );

マスクの否定(ビット反転)との排他的論理和は、先ほどの逆で、上位 (32-p) ビットが反転、下位 p ビットがそのままとなります:

// マスクの否定との XOR
int x = b(___+"_1_11_1_");
int y = b(lll+"111_____");  // == ~mask
int z = b(lll+"1_111_1_");  // 演算結果
assert( (x ^ y) == z );

// つまり
assert( (x ^ ~mask) == ((~x & ~mask) | (x & mask)) );

排他的論理和についても以下のような恒等式が成り立ちます:

// 任意の int 値 x, y, z に対して
assert( ((x ^ ~mask) & (x ^ mask)) ==  0 );
assert( ((x ^ ~mask) | (x ^ mask)) == -1 );
assert( ((x ^ ~mask) ^ (x ^ mask)) == -1 );

次回はこの続きでビットシフト演算子をやる予定。

Javaによる関数型プログラミング ―Java 8ラムダ式とStream

Javaによる関数型プログラミング ―Java 8ラムダ式とStream

  • 作者: Venkat Subramaniam,株式会社プログラミングシステム社
  • 出版社/メーカー: オライリージャパン
  • 発売日: 2014/10/24
  • メディア: 単行本(ソフトカバー)
  • この商品を含むブログ (3件) を見る

*1:というか、よく考えるとマスクでなく任意の int 値でも成り立ちそうですが。

*2:マスクでなく、任意の int 値について成り立ちますかね。

そこまで言って委員会 NP 2016年12月4日

そこまで言って委員会

さあみんなで考えよう!! ニッポンの諸問題 大解決スペシャル

フィフィさん、エジプト出身だけど2歳から名古屋...

高齢ドライバーの事故を防ぐ良い方法は?

パネラー 答え
桂ざこば ハンドル側にアクセル足下にブレーキ
木村太郎 65歳以上の事故率は24歳以下の半分
長谷川幸洋 70歳以上に毎年認知症テストを義務付け
宮家邦彦 ・運転能力テスト ・無料パス
フィフィ 無料パスと専用の乗り合いバス
田嶋陽子 自動運転車とか自動ブレーキ車の安価な提供
須田慎一郎 タクシークーポンの配布
竹田恒泰 高齢者は MT 車限定

認知症で車を運転して人を轢いたりすると、家族が責任を負わないといけなくなる可能性があるそうなので、注意が必要。

高齢者の免許返上を進める活動とかあるけど、車を運転する老人は頑固でなかなか家族の説得等にも応じない、というような話はよく聞くけど、木村氏はまさにご当人って感じだったなぁ(笑) 田嶋氏もその気はあるようだったけど。 毎年認知症検査やってでもオレは乗る!くらい言うなら別にいいと思うけど、車は死ぬまで運転するけど高齢者講習は面倒くさいとか、ホント頑固爺ぃや。

木村氏が言うには、高齢者の自動車事故が多発しているっていうのは嘘だとのことだけど、事故率を計算する際に免許を持っているが運転をしていない老人を分母に含めてるので統計として小さく出ているとの指摘も。 実際のところはどうなんでしょうかね(検索すらする気ねー)。

自動運転車が実用化されるようになればいろいろ状況が変わるかも知れないけど、車の運転以外のことも考慮するなら、田舎で暮らしてる高齢者にはバスの本数がそれなりにあるくらいの地域には移住してほしいよなぁ。 つーか、本人らの生活も格段に楽になると思うんだけど・・・ 月一くらいで先祖の墓でも巡るバスツアーでも出してあげるとかあってもいいし。

給食費を滞納させない良い方法は?

パネラー 答え
桂ざこば 前払い食券制度
木村太郎 大きな問題ではない!
長谷川幸洋 年度初めに一年分払わせる
宮家邦彦 カフェテリア方式で毎回有料に
フィフィ 国の制度にして無料化
田嶋陽子 給食費全額無料
須田慎一郎 給食を「松・竹・梅」に分ける
竹田恒泰 憲法改正

大阪市教育委員会の給食費の未収金残高(2015年度末)は1億1300万円(5606件)。 今年度から2000万円分ほどを回収業務を弁護士に委託予定とのこと。 昨年度から弁護士への委託を導入している東京都練馬区では、未納額が260万円(平成25年)から約120万円(平成27年)へ半減しているそうな。 成功している自治体ばかりじゃないのかも知れないけど。

まぁ、回収がうまくいくのはいいんだけど、そもそも無償化したらそんなコストもかからないしいいんじゃないの? 代わりに消費税とか上がることになるかも知れんけど。 もしくは、フィフィ氏が言ってたように、児童のために使われてるかどうか分からない児童手当を直接給食費に当てるというのは確かに良さそうね。

給食費どうこうとは別の話だけど、みんなで同じメニューを食べるのを変えて、カフェテリア、食堂などを導入すると、アレルギー持ちや宗教などで食べられる食品に制限がある子供たちにも融通が利くというのも名案では。

須田氏が言ってた、給食費を払わなかった場合には自炊させるっていう案もちょっと面白そう(笑)

ペット殺処分をなくす良い方法は?

パネラー 答え
桂ざこば レンタルにする
木村太郎 ペット飼育を登録制に
長谷川幸洋 ペット代金に殺処分代を上乗せ
宮家邦彦 罰則を強化するしかない
フィフィ “飼い主”になる為の免許制
田嶋陽子 ・「ペット税」をとる ・「動物避難所」をつくる
須田慎一郎 高額のペット税
竹田恒泰 ペットショップ禁止

昨年殺処分された犬猫は全国で約8万匹

f:id:waman:20161205023509p:plain

小池都知事、都知事選で犬猫の殺処分0ってのを公約にしてたそうで。 そういや、ドイツで殺処分0というのがよく取り上げられるけど、狩猟名目で日本と変わらない位の数の野良犬・野良猫が殺されてるという話もあるみたいね。 でも、保護施設みたいなのが寄付で成り立ってるとかはさすがにペット先進国だと思うけど(むしろ公共の施設はないとか)。

ペットを飼うにも、車の免許みたいに免許制にして実習やら講習やら、仮免期間や免許更新やらやったらどうでしょう。

異性と交際しない若者どうすれば良いか名案は?

パネラー 答え
桂ざこば どないしたらええねん
木村太郎 どうもしなくて良い
長谷川幸洋 男女グループ割引制度を広める!
宮家邦彦 子どもをつくる新婚夫婦に減税と補助金
フィフィ お金と時間に余裕のある社会
田嶋陽子 「ひとりがいちばん」と考える人がいて何が悪い!
須田慎一郎 教育カリキュラムに・・・
竹田恒泰 脱チェリー手当

出会い系居酒屋(相席居酒屋)、女性はただ飯で会計全て男持ち。 こういうの流行ると格差がどんどん拡大していく感じがするなぁ。 まぁ、婚活というよりキャバクラの方が近い気がするけど。

ベッキーさんが完全復帰できる良い方法は?

パネラー 答え
桂ざこば 成りゆき敷かない
木村太郎 問題はベッキーじゃなくて・・・
長谷川幸洋 アイドル席でなくゲスト席に呼ぶ!
宮家邦彦 メディア対応のプロをつけて説明をやり直す
フィフィ クレーマーを気にせず実力で復帰する
田嶋陽子 まず3年姿を消す
須田慎一郎 「泥だらけの純情」作戦
竹田恒泰 結婚

フィフィ氏、ベッキーさんと同事務所。 そういや、前回出たとき(半年前)もそんな話してたなぁ。 というか、ベッキー問題、長引いてますのぅ。

泥だらけの純情 [DVD]

泥だらけの純情 [DVD]

泥だらけの純情 [Blu-ray]

泥だらけの純情 [Blu-ray]

そこまで言って委員会NP ニッポンの危機 [DVD]

そこまで言って委員会NP ニッポンの危機 [DVD]

そこまで言って委員会 NP 2016年11月27日

そこまで言って委員会

トランプ新アメリカ大統領 悪夢のロイヤルストレートフラッシュ 大回避スペシャル!

ゲスト

  • 米国人ジャーナリスト・元日本外国特派員協会会長 ジェームズ・シムズ
  • タレント REINA
  • 元アメリカ海兵隊政策外交部副次長 ロバート・エルドリッヂ

今回はパネラーに、トランプが大統領選に勝つことを予想して当てた、木村太郎氏、大野和基氏を迎えてのトランプ新大統領テーマ。 予想が見事的中したんだけど、いまいち論拠が微妙な気が・・・ そう言えば、この番組に出てた人では他に飯島勲氏と金美麗氏がトランプ氏が勝つと予想してたそうな。 せっかくなら呼んでほしかった気はする。

(この番組以外の人も含めれば)トランプ氏が勝つという予想が当たったとしても、実際に大統領になったときに公約(?)を実行するのか今までの政策にある程度すり寄るのかというのは意見が分かれてる印象があるけど、そういう人の間での討論を見てみたいなぁという気がする。

アメリカはなぜトランプを選んだか (文春e-book)

アメリカはなぜトランプを選んだか (文春e-book)

↑大統領選が決するずっと前に出された本。 外れたときのためにペンネームにした説w(実際には実名で出したかったが、編集の方がペンネームにしてくれと言ってきたらしい)

日米同盟の危機 YES NO

パネラー YES or NO 答え
桂ざこば NO 在日米軍撤退はない
木村太郎 YES 「アメリカ・ファースト」
大野和基 YES 同盟国のことをあまり真剣に考えてない
宮家邦彦 NO 選挙モードから統治モードに移行中
田嶋陽子 NO 同盟の重要性はトランプ氏も承知済み
長谷川幸洋 NO 日本負担の増加 = 独自防衛能力強化
須田慎一郎 YES 「軍事費を NATO 並みに」と要求してくる
竹田恒泰 NO 日本の必要性が高まる
ジェームズ・シムズ NO 日本に軍事費と役割分担を求める
REINA NO 外交の公約は実現しなくても国民に許される
ロバート・エルドリッヂ NO 軍事的「同盟」から日米「関係」で議論を

宮家氏が言うに、米軍駐留に今以上にお金を出すならそれは米兵の人件費になるが、それはもはや傭兵となんら変わりない。 それなら日本政府に指揮権をよこせー、とのこと。

中国が(冗談交じりに?)言った、太平洋をハワイで2等分して統治するという提案があるけど、いくらトランプ氏でもそんな提案には乗らんよなぁ、と思いつつ一抹の不安が。 まぁ、さすがに日本や韓国、グアムにある基地を全部放棄して撤退、なんてことは考えにくくはあるけど。

TPP 離脱 YES NO

パネラー YES or NO 答え
桂ざこば 判断できない 就任するまでわからん
木村太郎 YES 来年1月20日に離脱すると言明済
大野和基 YES 保護主義をとる
宮家邦彦 YES 数少ない実行可能な公約
田嶋陽子 判断できない TPP の何を不利不備と感じているのか
長谷川幸洋 YES TPP はダメでも日米 FTA がある
須田慎一郎 YES 「TPP は憲法違反」
竹田恒泰 YES AM3P
ジェームズ・シムズ YES 再交渉の可能性はあるが・・・
REINA YES 公に発表した
ロバート・エルドリッヂ YES 二国間貿易協定を再交渉する

中国主導の RCEP (東アジア地域包括経済連携)

  • TPP ○ RCEP × 中国に2兆4000億円の経済損失
  • TPP × RCEP ○ 中国に9兆1600億円の経済効果

アメリカの TPP 離脱は中国を利することにつながる、とは言ってももう離脱を明言してるしさすがに離脱はカタいか。

アメリカが TPP にあれだけ反対するんだから、実は日本にとってお得な制度なんじゃないのかと今更思ってたり。 もともとはシンガポール、ブルネイ、チリ、ニュージーランドの4ヶ国から始まったので、アメリカ抜けても残りの国で似たような協定結んで進みそう(というか進めればいいのでは)。

中露の台頭 YES NO

パネラー YES or NO 答え
桂ざこば YES そんな空気がする
木村太郎 YES 演説で「うまくやっていかなければ」
大野和基 YES 「新世界秩序」が出来る
宮家邦彦 中国 YES
ロシア NO
しばらくは可能
経済力がない
田嶋陽子 YES 中国はすでに台頭している
長谷川幸洋 NO 中露は経済がアキレス腱
須田慎一郎 NO 「脅威にさらすスーパーパワーの登場は許さない」
竹田恒泰 NO 世界の嫌われ者
ジェームズ・シムズ NO ロシアは経済衰退 中国にも経済問題
REINA YES ビジネスマンらしいリスクヘッジ
ロバート・エルドリッヂ YES すでに「台頭」のレベルを突破

トランプ新大統領になると、ロシアのプーチンや北朝鮮の金正恩との関係も変わりそうだし、日本とそれらの国との関係も変わっていきそうね。 北方領土問題や拉致問題が進展することを祈るばかり。 さすがにこういうのは安倍政権でないと進められなさそうね。

円安・株高 YES NO

パネラー YES or NO 答え
桂ざこば YES 期待したい
木村太郎 YES 利上げならドル高 円安なら株高
大野和基 YES 財政出動と減税で景気は強化される
宮家邦彦 NO 普通なら小さな政府志向で2年間成長鈍化
田嶋陽子 NO 時々の発言や政策次第
長谷川幸洋 YES 「保護主義化で衰退」シナリオは遠のいた
須田慎一郎 NO トランプ新大統領への過剰な期待
竹田恒泰 YES 暴言出尽くし
ジェームズ・シムズ YES 利上げと減税・景気刺激策
REINA NO 政策の不透明さによる警戒感
ロバート・エルドリッヂ 判断できない 経済状況は持続不可能

経済がどうなっていくか、全然分からん。 どこか似たところがあるというレーガン大統領のレーガノミクスの後では日本はバブル景気になったそうだけど・・・

トランプ氏は、今後なにをしでかすと思いますか?

パネラー 答え
桂ざこば わかりません
木村太郎 国連の否定
大野和基 日本に「ノーマルな国」を要求
宮家邦彦 安全保障音痴ならアメリカを弱体化
田嶋陽子 意外とギブアンドテイクのイーブンで平和な世界
長谷川幸洋 米朝会議!?
須田慎一郎 金正恩氏との電撃会談
竹田恒泰 同性婚
ジェームズ・シムズ 弾劾される可能性
REINA 北朝鮮へのアプローチ
ロバート・エルドリッヂ 予想外の人事

トランプ新大統領の暗殺、成功するかどうかはともかく、すくなくとも未遂事件とかは起こるんだろうなぁ。 そういや、ケネディ大統領の暗殺って、警備の手違いとか偶然が重なったものらしいね。 撃たれる瞬間の映像以外何も知らんかったけど。



そこまで言って委員会NP ニッポンの危機 [DVD]

そこまで言って委員会NP ニッポンの危機 [DVD]