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

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

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

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Q&A

解決済

3回答

357閲覧

AndroidJavaの読み方について

jin007

総合スコア34

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

0グッド

0クリップ

投稿2018/12/21 07:07

編集2018/12/21 07:11

疑問点

以下の構文で「|」が出てくるのですがこの読み方がいまいちわかりません。
また、「<<8」はどのように読むのか処理なのか理解できません。

sum = ((result & (int) test[jpn + math])) | ((result & (int) test[jpn + math + 1]) <<8);

Javaは経験しているのですが、AndroidJavaは今勉強最中で調べてもそれらしき記事を見つけられなかったので質問させていただきます。
変数の宣言等は書き方の意味を知りたいだけなので今回省略してあります。

追記

「|」パイプラインと読むらしいので、以下の手法??

パイプライン並列化手法
処理を分割して流れ作業させる手法です。
順番に実行する役割のスレッドを用意しておき、
一連の処理を行う複数のタスク実行を可能なら並び替え、
「依存性のあるタスク同士が求める順番に実行されるよう、
順序づけしたスレッドに割り当てられるよう」分割して、
流れ作業のように、順序依存のあるタスクを処理させます。

こちらのサイト参考

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

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

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

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

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

guest

回答3

0

ベストアンサー

&、|、<<はいずれもビット演算です。
& ビットAND
| ビットOR
<< 左シフト

読み解くと、
result と test[jpn+math] のビットAND 結果

result と test[jpn+math+1] の値を8bit左シフトしたものとのビットAND 結果
をビットOR したもの

となります。

※1ビットの左シフトは値を2倍することに概ね匹敵します(符号付き数値の場合には必ずしも成立しない)

一般にビットAND は「不要なビットを消す」、ビットORは「必要なビットを立てる」のに使われます。

投稿2018/12/21 07:16

tacsheaven

総合スコア13703

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

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

jin007

2018/12/21 07:29

回答ありがとうございます、ビット演算子は知りませんでした。 読み方も記載してくださったtacsheavenさんをベストアンサーにいたしました。
jin007

2019/01/07 08:14

質問文の式を読み解いたていで質問です。 sum = (-100 | 2 << 8); のsumの値は何になりますか? 668になりますか??
tacsheaven

2019/01/07 10:04 編集

演算子の優先順位の関係で、-100 | (2<<8) = -100 | 512 になりますから、 1111111110011100 or 0000001000000000 ------------------------ 1111111110011100 となって、-100 のままになるかと思います。
jin007

2019/01/07 10:32

すみません、計算間違えていました! sum=(156 | 255 & 512); のsumは668になりますか?
tacsheaven

2019/01/07 23:51

優先順位は & > | ですから、255 & 512 を先に計算して、そこから 156 との or になります。 0000000011111111 255 0000001000000000 512 ----------------------- and 0000000000000000 ですから、結局 255 & 512 は 0 になって、0 との or ですから何も変わらず、156 になります。
jin007

2019/01/08 03:17

そうですよね。自分もその結論に至ったのですが、 sumの中身をログ出して確認したら668でした。 ちなみに、 sum=(156 | 512)は668になりますか? 単純に足し算をしたら668になるのですが。。。 以下の計算で合っていますでしょうか? 0000000010011100 156 0000001000000000 512 ----------------------- or 0000001010011100 668
tacsheaven

2019/01/08 04:06

はい、そうなります。 もしかして 156 & 255 | 512 なのでは?
jin007

2019/01/08 04:15

ありがとうございます。 自分の計算する順序ミスでした。 sum=(156 | 512)でしたので納得しました。
guest

0

「|」パイプラインと読むらしいので、以下の手法??

全く無関係です。これは単なる整数演算で、一般的なJavaにも存在します。

  • |…ビットごとのOR演算子
  • <<…シフト演算子

詳しくは「ビット演算」で調べてみてください。

投稿2018/12/21 07:14

maisumakun

総合スコア145184

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

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

jin007

2018/12/21 07:30

回答ありがとうございます、 読み方も記載してくださったtacsheavenさんをベストアンサーにいたしました。 今回ビット演算子を学ぶいい機会になりました。
guest

0

"|"という文字は、一般に バーティカル・バー (Vertical Bar (意味は縦棒))と呼ばれます。

Shellのパイプ機能(手前に書かれた処理の標準出力を、次の処理の標準入力に受け渡す機能)を使う際には、2つの処理をつなぐのに、バーティカル・バーが使われます。

投稿2018/12/21 07:31

coco_bauer

総合スコア6915

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問