右ビットシフト演算を2 回行い、 4で除算する方法
1 :
デフォルトの名無しさん:
例えば、10 進数の12( 2 進数の1100)に対して右ビットシフト演算を行う場合、
12= 1 1 0 0
6= 0 1 1 0 右ビットシフト演算(1 回目)
3= 0 0 1 1 右ビットシフト演算(2 回目)
となる。
このことから解かるように、
右ビットシフト演算を2 回行うことにより、
12( 10 進数)が
3(10 進数)となっており、
4 による除算が実現されている。
2 :
デフォルトの名無しさん:2007/06/25(月) 15:25:27
_人人人人人人人人人人人人人人_
> な なんだってー!! <
 ̄^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^ ̄
_,,.-‐-..,,_ _,,..--v--..,_
/ `''.v'ν Σ´ `、_,.-'""`´""ヽ
i' / ̄""''--i 7 | ,.イi,i,i,、 、,、 Σ ヽ
. !ヘ /‐- 、u. |' |ノ-、 ' ` `,_` | /i'i^iヘ、 ,、、 |
|'' !゙ i.oニ'ー'〈ュニ! iiヽ~oj.`'<_o.7 !'.__ ' ' ``_,,....、 .|
. ,`| u ..ゝ! ‖ .j (} 'o〉 `''o'ヽ |',`i
_,,..-<:::::\ (二> / ! _`-っ / | 7  ̄ u |i'/
. |、 \:::::\ '' / \ '' /〃.ヽ `''⊃ , 'v>、
!、\ \. , ̄ γ/| ̄ 〃 \二-‐' //`
10進数で2つ右にシフトしたら100による除算になるのと同じこと。
感動する点は何1つない。
お前、今更知ったのか?
n >> 2
とかよく見るだろ
>>3 Hello, world の文字を変えて
「おお、変わった変わった♪」
くらいの事でも感動できるもんよ、最初は。
ただ、それでスレ勃てるのはただの莫迦だけどな。
次は8の場合でスレたててよ
無駄な抵抗はやめろ
8 :
デフォルトの名無しさん :2007/06/26(火) 09:05:47
例えば,getbits(x,4,3)は何を返すでしょう。
unsigned getbits(unsigned x, int p, int n)
{
return (x >> (p+1-n)) & ~(~0 << n);
}
例えば、10 進数の-12( 2 進数の11110100)に対して右ビットシフト演算を行う場合、
-12= 1 1 1 1 0 1 0 0
-6= 1 1 1 1 1 0 1 0 右ビットシフト演算(1 回目)
-3= 1 1 1 1 1 1 0 1 右ビットシフト演算(2 回目)
となる。
このことから解かるように、
右ビットシフト演算を2 回行うことにより、
-12( 10 進数)が
-3(10 進数)となっており、
4 による除算が実現されている。
>>11 それは arithmetic shift であって、logical shift ではない。
>>8-9 なんか、5ビット目から3ビット分になってね?
5ビット目のindexが4だから、正しくは5ビット目から3ビット分
あるいは、index4の位置から3ビット分
負数の右シフトは処理系依存だな
16 :
デフォルトの名無しさん:2007/06/26(火) 13:42:10
>>15 処理系ではなく型によって挙動が変わるだけ。
Java の char はその辺がウザいね
>>1-
>>18 ここは右シフトの多いインターネッツですね
|:;:;:;:;:;:;:;:;:;:;:;:;:;:i;:;:;:;:;:;:;:;:;:;:;:;:;|
|;:;:_:;:_:;:_:;:_;:;_:;:l:;_;:_:;:_:;:_:;:_;:_;|
|______|_____|
| 三| _ _ |三 !
| 三| 三シ ヾ三 |三 |
| 三′ .._ _,,.. i三 |
ト、ニ| <でiンヽ ;'i"ィでiン |三.| 言語も書かずに処理系依存とな!!
', iヽ! 、 ‐' / !、 ーシ |シ,イ
i,ヽリ ,' : !. |f ノ
ヾ! i ,、 ,..、ヽ lノ
| _ _ イ l
l ,ィチ‐-‐ヽ i /、
゙i、 ゝ、二フ′ ノ/'"\
| \ ー一 / / _,ン'゙\
,ィ|、 \ /_,、-'" _,.-''´ `丶、__
_, イ | ヽ_ 二=''" _,. -''´ """""´´ ``ー