質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Q&A

解決済

2回答

1054閲覧

///////左シフト演算

ann_0.6

総合スコア1

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

0グッド

0クリップ

投稿2022/08/30 13:37

techfulの問題です。

標準入力から二つの整数aとbが入力されます。
aを左にbビットシフトした結果を1行で出力してください。

●制約
a(1≦a≦3×10^6)
b(1≦b≦10)

サンプルケース
a:25
b:4

期待される値:400

説明
25を左に4ビットシフトすると400となります。

実現したいこと

テストケースが5までありましてなぜか4だけエラーが出てしまいます。
25を左に4ビット左シフトしたいのです。
演算子をつかわないでシフト演算するのでは?と思いましたがやり方がわかりません。

発生している問題・エラーメッセージ

エラーメッセージ WRONG ANSWER ### 該当のソースコード C# ソースコード using System; namespace Main { class Program { static void Main(string[] args) { int s = int.Parse(Console.ReadLine()); int m= int.Parse(Console.ReadLine()); Console.Write(s<<m); } } } ### 補足情報(FW/ツールのバージョンなど) ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

<諸前提>

●制約 a(1≦a≦3×10^6) b(1≦b≦10)

より、
aを左にbビットシフトした結果がとりうる最大値は
3 × 10^6 × 1,024 = 3,072,000,000
ですが、これは int の上限(2,147,483,647)を超えています。
https://docs.microsoft.com/ja-jp/dotnet/csharp/language-reference/builtin-types/integral-numeric-types

左シフト演算子では、結果の型の範囲外にある上位ビットは破棄され、空の下位ビット位置は、ゼロに設定されます。参考

<上記の事実と質問の状況から推測できること>

第4問は、左シフト演算の結果 int の範囲を超えるような a, b が設定されていると考えられます。
質問のコードは、int 型の数に対してシフト演算するようになっていますが、第4問ではシフト演算の結果が int 型の範囲を超えており、上位ビットが破棄されて Wrong Answer になってしまっていると推測されます。

<対応策>

したがって、64bit整数(long)に対して左シフト演算を行うように組む必要があります。
なお、左シフト演算子の右辺 に long型を置くとエラーになるので、右辺は int のままとします。

C#

1using System; 2 3namespace Main 4{ 5 class Program 6 { 7 static void Main(string[] args) 8 { 9 long s = Convert.ToInt64(Console.ReadLine()); 10 int m = int.Parse(Console.ReadLine()); 11 Console.Write(s<<m); 12 } 13 } 14}

投稿2022/08/30 14:14

編集2022/08/30 22:19
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ann_0.6

2022/09/01 01:19

おっしゃる通り訂正しましたところ通過いたしましたので範囲の超過が原因だったみたいです。 プログラミング初心者にご丁寧に回答してくださりありがとうございます。
guest

0

aを左にbビットシフトした結果を1行で出力してください。

a<<b

投稿2022/08/30 22:33

y_waiwai

総合スコア87774

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Zuishin

2022/08/31 05:07

質問のコードがそうなっています。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問