まず右辺の数字は整数リテラルと言うもの

変数に代入時は整数リテラルは型より大きすぎるなどしてない限り変数と同じ型とみなされる
そうしないと不便だから

次に i = hoge ? 1 : 0;
の右辺は式である
整数リテラルは代入じゃないときは暗黙的にint扱いになるので右辺の式の値の型はintになる
これでキャストが必要

i = true ? 1 : 0;
この右辺はコンパイル時に決定されてるので代入可能

short s = 7000000-6999999;
これも代入可能なのと同じ感覚