https://paiza.jp/works/mondai/logical_operation/logical_operation__basic_step3/edit?language_uid=c-sharp
この問題をC#のビット演算で解こうとしています。
以下のように記述したのですが出力に-1と出てしまいます。
何故1と表示されないのかと1と表示する方法を教えてほしいです。
using System; class Program { static void Main() { var line = int.Parse(Console.ReadLine()); Console.WriteLine(~line); } }`
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/05/10 09:25

回答2件
0
ベストアンサー
■ 何故1と表示されないのか
int (System.Int32) は 32bit の符号付整数だからです。
0を2進数で表すと
0000 0000 0000 0000 0000 0000 0000 0000
これをビット反転すると
1111 1111 1111 1111 1111 1111 1111 1111
となり、10進では -1 になります。
■ 1と表示する方法
簡単にするなら、欲しいのは下位1ビットなので 1 と AND を取るのが良いかと思います。
C#
1static void Main(string[] args) { 2 var line = int.Parse(Console.ReadLine()); 3 Console.WriteLine(~line & 1); 4}
お遊びですが、0 と 1 しか代入できないクラスを作り、NOT 演算子をオーバーロードするのも面白いかも。
C#
1public class BIT 2{ 3 int value = 0; 4 5 private BIT(int value) { 6 switch (value) { 7 case 0: 8 case 1: 9 this.value = value; 10 break; 11 default: 12 throw new ArgumentOutOfRangeException(); 13 } 14 } 15 16 public override bool Equals(object obj) { 17 return value.Equals(obj); 18 } 19 20 public override int GetHashCode() { 21 return value.GetHashCode(); 22 } 23 24 public override string ToString() { 25 return value.ToString(); 26 } 27 28 public static implicit operator BIT(int value) { 29 return new BIT(value); 30 } 31 32 public static BIT operator ! (BIT value) { 33 return ~value.value & 1; 34 } 35} 36 37static void Main(string[] args) { 38 BIT line = int.Parse(Console.ReadLine()); 39 Console.WriteLine(!line); 40}
投稿2022/05/09 18:41
編集2022/05/09 19:21総合スコア2721
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
~という演算子はNOTではなく、ビット反転です
ちゃんとNOTを使いましょう
投稿2022/05/09 14:56
編集2022/05/09 15:00総合スコア88163
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/05/09 21:30
2022/05/09 23:09
2022/05/09 23:10
2022/05/09 23:29
2022/05/10 01:26 編集
2022/05/10 03:11 編集
2022/05/10 03:35 編集
2022/05/10 04:07
2022/05/10 10:49
2022/05/10 13:58 編集
2022/05/10 15:03 編集

あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。