2進数の扱いとビット演算
N進数の話が大体終わったけど、計算機構成論の内容にも関連するということで、 2進数演算・ビット演算の演算子の説明と、2進数を用いた乗算処理を説明する。
int mul( int x , int y ) { int s = 0 ; while( y != 0 ) { if ( y % 2 != 0 ) s += x ; y /= 2 ; x *= 2 ; } } void main() { printf( "%d\n" , mul( 11 , 10 ) ) ; }
この関数を示し、計算結果を予想してもらい、その後でこの計算が、 2進数による乗算であることを示し、この考え方を計算機構成論の 乗算回路あたりで習うであろうことを説明する。
1011 x)1010 ------ 0000 10110 000000 +)1011000 --------- 1101110)2 = 110)10
ビット演算子
乗算の説明の後、2での割り算や乗算がビットシフトであることの説明をして、 この結果を踏まえ、<<>>,^,~などの演算子を説明する。
AND | & | ビット論理積 |
OR | | | ビット論理和 |
EXOR | ^ | ビット排他的論理和 |
左シフト | << | ビット左シフト |
右シフト | >> | ビット右シフト |
これに加え、このような演算子には、自己代入型の、 *=,/=,&=,|=,<<=,>>= などの紹介も行う。