බිට් මාරුව ක්රියාකරුවන් ඔවුන්ගේ නමට සමාන දේ කරයි. ඔවුන් බිටු මාරු කරයි. විවිධ මාරුව ක්රියාකරුවන් පිළිබඳ කෙටි (හෝ එතරම් කෙටි නොවන) හැඳින්වීමක් මෙන්න.
ක්රියාකරුවන්
>>
අංක ගණිත (හෝ අත්සන් කළ) දකුණු මාරුව ක්රියාකරු වේ.
>>>
තාර්කික (හෝ අත්සන් නොකළ) දකුණු මාරුව ක්රියාකරු වේ.
<<
වම් මාරුව ක්රියාකරු වන අතර තාර්කික හා අංක ගණිත මාරුවල අවශ්යතා සපුරාලයි.
මෙම ක්රියාකරුවන් සියලු (පූර්ණ සංඛ්යාවක් වටිනාකම් යෙදිය හැකි int
, long
හැකි, short
සහ byte
හෝ char
). සමහර භාෂාවල, මාර්ග ක්රියාකරුවන් int
ස්වයංක්රීයව ප්රතිස්ථාපනය කිරීමට වඩා කුඩා දත්ත සමුදායකට යෙදවීම int
.
<<<
එය අතිරික්තයක් වන බැවින් එය ක්රියාකරුවෙකු නොවන බව සලකන්න .
C සහ C ++ නිවැරදි මාරුව ක්රියාකරුවන් අතර වෙනස හඳුනා නොගන්නා බව සලකන්න . ඔවුන් සපයන්නේ >>
ක්රියාකරු පමණක් වන අතර , නිවැරදි මාරුවීමේ හැසිරීම යනු අත්සන් කරන ලද වර්ග සඳහා ක්රියාත්මක කිරීම අර්ථ දැක්වීමකි. ඉතිරි පිළිතුර C # / Java ක්රියාකරුවන් භාවිතා කරයි.
(ජීසීසී සහ ක්ලැන්ග් / එල්එල්වීඑම් ඇතුළු සියලුම ප්රධාන ධාරාවේ, >>
අත්සන් කරන ලද වර්ගවල ගණිතමය වේ. සමහර කේතයන් මෙය උපකල්පනය කරයි, නමුත් එය සම්මත සහතික කරන දෙයක් නොවේ. එය නිර්වචනය කර නැත , නමුත් ප්රමිතියට එය අර්ථ දැක්වීමට අවශ්ය වේ කෙසේ වෙතත්, negative ණ අත්සන් කළ සංඛ්යා වල වම් මාරුව යනු නිර්වචනය නොකළ හැසිරීමකි (අත්සන් කරන ලද පූර්ණ සංඛ්යා පිටාර ගැලීම). එබැවින් ඔබට ගණිතමය නිවැරදි මාරුවක් අවශ්ය නොවන්නේ නම්, සාමාන්යයෙන් අත්සන් නොකල වර්ග සමඟ ඔබේ බිටු මාරුව කිරීම හොඳ අදහසකි.)
වම් මාරුව (<<)
පූර්ණ සංඛ්යා බිටු මාලාවක් ලෙස මතකයේ ගබඩා කර ඇත. උදාහරණයක් ලෙස, 32-බිට් ලෙස ගබඩා කර ඇති අංක 6 int
වනුයේ:
00000000 00000000 00000000 00000110
මෙම බිට් රටාව වමේ එක් ස්ථානයකට මාරු කිරීමෙන් ( 6 << 1
) අංක 12 ට හේතු වේ:
00000000 00000000 00000000 00001100
ඔබට පෙනෙන පරිදි, ඉලක්කම් එක් ස්ථානයකින් වමට මාරු වී ඇති අතර දකුණු පස ඇති අවසාන ඉලක්කම් ශුන්යයෙන් පුරවා ඇත. වමට මාරුවීම 2 බලයෙන් ගුණ කිරීමකට සමාන බව ඔබට සටහන් කළ හැකිය. එබැවින් 6 << 1
එය සමාන 6 * 2
වන අතර 6 << 3
සමාන වේ 6 * 8
. හොඳ ප්රශස්තිකරණ සම්පාදකයෙකු හැකි විට ගුණ කිරීම් මාරුවීම් සමඟ ප්රතිස්ථාපනය කරයි.
රවුම් නොවන මාරුව
මේවා රවුම් මාරුව නොවන බව කරුණාවෙන් සලකන්න . මෙම අගය එක් ස්ථානයකින් වමට මාරු කිරීම ( 3,758,096,384 << 1
):
11100000 00000000 00000000 00000000
ප්රති results ල 3,221,225,472:
11000000 00000000 00000000 00000000
"අවසානයෙන් ඉවතට" මාරු වන ඉලක්කම් නැති වී යයි. එය වටා එතෙන්නේ නැත.
තාර්කික දකුණු මාරුව (>>>)
තාර්කික දකුණු මාරුව යනු වම් මාරුවට සංවාදයයි. බිටු වමට ගෙන යනවා වෙනුවට ඒවා දකුණට ගමන් කරයි. උදාහරණයක් ලෙස, අංක 12 මාරු කිරීම:
00000000 00000000 00000000 00001100
එක් ස්ථානයකින් දකුණට ( 12 >>> 1
) අපගේ මුල් 6 නැවත ලබා ගනී:
00000000 00000000 00000000 00000110
එබැවින් දකුණට මාරුවීම 2 බලයෙන් බෙදීමට සමාන බව අපට පෙනේ.
නැතිවූ බිටු නැති වී ඇත
කෙසේ වෙතත්, මාරුවකට "නැතිවූ" බිටු නැවත ලබා ගත නොහැක. උදාහරණයක් ලෙස, අපි මෙම රටාව මාරු කළහොත්:
00111000 00000000 00000000 00000110
වම් ස්ථාන 4 ට ( 939,524,102 << 4
), අපට ලැබෙන්නේ 2,147,483,744:
10000000 00000000 00000000 01100000
පසුව ආපසු (939,524,102 << 4) >>> 4
මාරුවීමෙන් ( ) අපට ලැබෙන්නේ 134,217,734:
00001000 00000000 00000000 00000110
බිටු නැති වූ පසු අපට අපගේ මුල් වටිනාකම නැවත ලබා ගත නොහැක.
අංක ගණිත දකුණු මාරුව (>>)
අංක ගණිත දකුණු මාරුව හරියටම තාර්කික දකුණු මාරුවට සමානය, ශුන්යය සමඟ පෑඩ් කිරීම වෙනුවට, එය වඩාත්ම වැදගත් බිටු සමඟ පෑඩ් කරයි. මෙයට හේතුව වඩාත්ම වැදගත් බිට් සං sign ා බිට් හෝ ධනාත්මක හා negative ණ සංඛ්යා වෙන්කර හඳුනා ගන්නා බිට් ය. වඩාත්ම වැදගත් බිටු සමඟ පෑඩ් කිරීමෙන්, අංක ගණිත දකුණු මාරුව සං sign ා සංරක්ෂණය කරයි.
උදාහරණයක් ලෙස, අපි මෙම බිට් රටාව negative ණ සංඛ්යාවක් ලෙස අර්ථ දැක්වුවහොත්:
10000000 00000000 00000000 01100000
අපට අංකය -2,147,483,552 ඇත. අංක ගණිත මාරුව (-2,147,483,552 >> 4) සමඟ මෙය නිවැරදි ස්ථාන 4 ට මාරුවීම අපට ලබා දෙනු ඇත:
11111000 00000000 00000000 00000110
හෝ අංකය -134,217,722.
එබැවින් අපගේ negative ණ සංඛ්යා වල සං sign ාව තාර්කික දකුණු මාරුවට වඩා අංක ගණිත දකුණු මාරුව භාවිතා කිරීමෙන් අපි ආරක්ෂා කර ඇති බව අපට පෙනේ. නැවත වරක්, 2 බලයෙන් බෙදීම සිදු කරන බව අපට පෙනේ.