現在C言語で書かれたプログラムをもとに、pythonで書き直しています。
そこでタイトルの所でつまづきました。
unsigned long型のvalueを使って、(byte)(value>>8)を表現するにはどう知ればいいでしょうか?
もし方法を知っていらっしゃれば、ご回答をぜひ宜しくお願いします。
<追記>
print(type(value))した場合、整数値を受け取った場合はintになり、小数を入れた場合はfloatが帰ってきました。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答5件
0
投稿2016/07/06 01:25
総合スコア2493
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/07/06 01:30 編集
2016/07/06 01:34
2016/07/06 01:48
2016/07/06 06:01
2016/07/07 01:52
2016/07/07 02:25
0
自己解決
すみません!複数の型にご指摘いただいた通り元のプログラミでは、この式を実行する前に整数型に変換して受け渡しておりました!
pythonのintというか整数型は範囲が広いことが分かったので、そのままintにすることで解決しました。
お騒がせしてすみません、ありがとうございました。
投稿2016/07/09 10:18
総合スコア15
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
unsigned long型のvalueを使って、(byte)(value>>8)を表現するにはどう知ればいいでしょうか?
print(type(value))した場合、整数値を受け取った場合はintになり、小数を入れた場合はfloatが帰ってきました。
コンピュータ上での数値の扱いについて、根本的な誤解があるように思えます。確認された通り、Pythonでは「整数値を受け取った場合はintになり、小数を入れた場合はfloat」になりますが、floatのような浮動小数点数に対して >>
のようなビット単位演算は行えません(その結果を定義できません)。
本当にやりたいことを一度整理された方が良いです。
投稿2016/07/07 03:00
総合スコア6191
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
「なぜかfloatになっている」との事ですが。
pythonのバージョンは3ですか?
python3では除算の結果は(たとえintどうしでも)floatになります。
例えばCやpython2で「1 / 2」の結果は「0」になりますが、python3だとfloat(「0.5」)になります。
同じように書くならば、「1 // 2」と書きます。
python
1Python 3.5.1+ (default, Mar 30 2016, 22:46:26) 2[GCC 5.3.1 20160330] on linux 3Type "help", "copyright", "credits" or "license" for more information. 4>>> type(1 / 2), 1 / 2 5(<class 'float'>, 0.5) 6>>> type(1 // 2), 1 // 2 7(<class 'int'>, 0) 8>>>
かなり憶測が入っていますが、心当たりはありますでしょうか。
投稿2016/07/06 13:51
総合スコア3469
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
こんにちは。
matobaaさんへのコメントも見てます。
pythonを知らないので直接の回答ができませんが、ヒントにはなると思います。
そもそもbyte
へキャストしているということは、小数点以下の値は切り捨てていると思います。
また、byte
は字面からしてunsigned char
型と思いますが、その通りでしょうか?
x >> 8
は8ビット右シフトですから256で割るのとほぼ同じです。
unsigned char
へキャストするということは、8ビットを超える部分を0へ切り捨てますので、256の剰余と同じです。
であれば、まずvalueの小数点以下を切り捨てて整数とし、256で割った後、256の剰余を求めればよいと思います。
Cではちゃんとunsigned long型としてvalueを宣言しましたが、python上ではなんの型情報も入れずに2.132とか代入しています。
元のCプログラムでもunsigned long型に2.132を代入しているのでしょうか?
その時点で切り捨てられると思います。なぜにわざわざ小数値を代入するのでしょうか? 単にvalue=2;
ではだめなのですか?
投稿2016/07/06 07:38
編集2016/07/06 07:38総合スコア23272
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。