ビット単位のシフト演算

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
どころてん

ビット単位のシフト演算

#1

投稿記事 by どころてん » 15年前

#include <stdio.h>
int main(void)
{
unsigned all_data,data1;
scanf("%x",&all_data);

data1=(all_data>>8)&0xff;

printf("%x \n",data1);

return 0;
}

このプログラムですが、&0xffって何ですか??
何かのおまじないですか??

たかぎ

Re:ビット単位のシフト演算

#2

投稿記事 by たかぎ » 15年前

左辺と0xffのビットANDです。

どころてん

Re:ビット単位のシフト演算

#3

投稿記事 by どころてん » 15年前

すいません、言葉が足らなさすぎました。
&0xffってこのプログラムではどんな役割をしているんですか?

たかぎ

Re:ビット単位のシフト演算

#4

投稿記事 by たかぎ » 15年前

> &0xffってこのプログラムではどんな役割をしているんですか?

下8ビットを取り出しています。

どころてん

Re:ビット単位のシフト演算

#5

投稿記事 by どころてん » 15年前

> 下8ビットを取り出しています。
何で下8ビットを取り出すってわかるんでしょうか?
何か定義に基づいてるのですか?
それともそのまま覚えたほうがいいのでしょうか??

たかぎ

Re:ビット単位のシフト演算

#6

投稿記事 by たかぎ » 15年前

> 何で下8ビットを取り出すってわかるんでしょうか?

0xffというのは、2進数になおすと、11111111のように1が8つ並びます。
それと他の値とのビットANDを計算すると、1のところ(つまり下位8ビット)はそのままで、9ビット目から上は全部0になります。
結果として、下位8ビットだけが取り出せます。

conio

Re:ビット単位のシフト演算

#7

投稿記事 by conio » 15年前

>>何で下8ビットを取り出すってわかるんでしょうか?
>>何か定義に基づいてるのですか?
16進数や、2進数にするとどのようなビットの並びになるか、等は分かりますか?

もし分からなければ、解説しているサイトなどもありますので、見てみるといいかもしれません。
16進数、2進数なんかで検索すると 色々と出てきます。
------------------------------------------------------
http://www.asahi-net.or.jp/~ax2s-kmtn/ref/bdh.html
http://www.geocities.jp/cwqnx949/xshinsuu/
------------------------------------------------------

pp

Re:ビット単位のシフト演算

#8

投稿記事 by pp » 15年前

&0xffをint *p=&a;などの&aのようなアドレス参照を意味する&と勘違いされていませんか?
data1=(all_data>>8)&0xff;は(all_data>>8)の計算結果と0xff(10進数でいうところの255)を
&演算(AND演算)してその結果をdata1に代入するという式です
この式にある&は+や*と同じ左辺と右辺を使って処理をする演算子でアドレス参照を意味する&ではありません

閉鎖

“C言語何でも質問掲示板” へ戻る