#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:ビット単位のシフト演算
> 下8ビットを取り出しています。
何で下8ビットを取り出すってわかるんでしょうか?
何か定義に基づいてるのですか?
それともそのまま覚えたほうがいいのでしょうか??
何で下8ビットを取り出すってわかるんでしょうか?
何か定義に基づいてるのですか?
それともそのまま覚えたほうがいいのでしょうか??
Re:ビット単位のシフト演算
> 何で下8ビットを取り出すってわかるんでしょうか?
0xffというのは、2進数になおすと、11111111のように1が8つ並びます。
それと他の値とのビットANDを計算すると、1のところ(つまり下位8ビット)はそのままで、9ビット目から上は全部0になります。
結果として、下位8ビットだけが取り出せます。
0xffというのは、2進数になおすと、11111111のように1が8つ並びます。
それと他の値とのビットANDを計算すると、1のところ(つまり下位8ビット)はそのままで、9ビット目から上は全部0になります。
結果として、下位8ビットだけが取り出せます。
Re:ビット単位のシフト演算
>>何で下8ビットを取り出すってわかるんでしょうか?
>>何か定義に基づいてるのですか?
16進数や、2進数にするとどのようなビットの並びになるか、等は分かりますか?
もし分からなければ、解説しているサイトなどもありますので、見てみるといいかもしれません。
16進数、2進数なんかで検索すると 色々と出てきます。
------------------------------------------------------
http://www.asahi-net.or.jp/~ax2s-kmtn/ref/bdh.html
http://www.geocities.jp/cwqnx949/xshinsuu/
------------------------------------------------------
>>何か定義に基づいてるのですか?
16進数や、2進数にするとどのようなビットの並びになるか、等は分かりますか?
もし分からなければ、解説しているサイトなどもありますので、見てみるといいかもしれません。
16進数、2進数なんかで検索すると 色々と出てきます。
------------------------------------------------------
http://www.asahi-net.or.jp/~ax2s-kmtn/ref/bdh.html
http://www.geocities.jp/cwqnx949/xshinsuu/
------------------------------------------------------
Re:ビット単位のシフト演算
&0xffをint *p=&a;などの&aのようなアドレス参照を意味する&と勘違いされていませんか?
data1=(all_data>>8)&0xff;は(all_data>>8)の計算結果と0xff(10進数でいうところの255)を
&演算(AND演算)してその結果をdata1に代入するという式です
この式にある&は+や*と同じ左辺と右辺を使って処理をする演算子でアドレス参照を意味する&ではありません
data1=(all_data>>8)&0xff;は(all_data>>8)の計算結果と0xff(10進数でいうところの255)を
&演算(AND演算)してその結果をdata1に代入するという式です
この式にある&は+や*と同じ左辺と右辺を使って処理をする演算子でアドレス参照を意味する&ではありません