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

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

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

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

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

2回答

1825閲覧

シフト演算 C# →python にて、実行結果の食い違い。

KK-31

総合スコア22

C#

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

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2016/12/06 07:30

プログラムの一部を言語の乗り換えを実現すべく、C#→pythonにコンバートしております。
そこで、問題にあたりました。
初心者プログラマーですが、是非知恵をお借りしたく回答のほどよろしくお願い致します。

###前提・実現したいこと
C#にて、シフト演算を行っており、pythonでも同様のことをしたいと考えています。
C#側にて、

c#

1Console.WriteLine(4294967290 << 1)

を実行すると、

c#

1 結果: 4294967284

となります。

###発生している問題・エラーメッセージ
python側で同様に

python

1print np.uint32(4294967290 << 1)

を実行すると

python

1結果: 8589934580

となります。

こちらの現象について、C#と同じ結果をpythonでも出したい場合、
python側のコードを変更すれば良いでしょうか。

ご教授お願い致します。

###補足情報(言語/FW/ツール等のバージョンなど)
より詳細な情報

C#実行環境 Visual Studio 2010
python実行環境 python 2.7

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

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

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

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

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

guest

回答2

0

どちらかというとC#側の方が問題な気もしますが。
シフト演算どうこうより桁あふれを起こしています。しかも暗黙的でわかりにくい状態で。

質問文のコードは実質以下のようになっています(定数は暗黙的に表現できる最小の型が適用される)

C#

1// uint の最大値は4294967295でぎりぎり収まるのでuint型として扱われる 2Console.WriteLine((uint)4294967290 << 1); //でも直後で2倍にしているので余裕で桁あふれを起こす

ちなみにこう書くとコンパイルエラーになります(intでは4294967290を表現できないから)

C#

1Console.WriteLine((int)4294967290 << 1);

あくまで完全に移植することに意義があるなら仕方ないですが、
C#側はlong変数を渡すようにした方がいいような気がします。

追記:
すいません、語弊がありました。
最小の型と言いましたが、charやshort等は使われません。
http://blogs.wankuma.com/mnow/archive/2007/12/27/114994.aspx

投稿2016/12/06 08:09

編集2016/12/06 08:16
ishi9

総合スコア1294

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

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

0

ベストアンサー

print (np.uint32(4294967290) << np.uint32(1))

投稿2016/12/06 07:47

ozwk

総合スコア13521

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問