Siljitish Operatorlari.
S# da ma’nolarni berilgan son razryadiga ko’ra uni unga va chapka siljitishga bo’ladi.
Uning uchun S # da kuyidagi razryadli siljitish operatorlari belgilangan : << chapka siljiish; >> unga siljitish. Shu operatorlarning yozilish umumiy formati kuyidagicha:
Ma’no << bitlar^ soni;
Ma’no >> bitlar^ soni;
Bo’ yerda ma’no - bu siljitish operatorining ob’ekti , a element bitlar^ soni esa kancha raryad soniga siljitishini kursatish kerak.
Chapka bir razryadga silijitishda xamma bitlar bir poziiya chapka siljiydi, a eng kichik razryadga nul ma’nosi kuyiladi. Ungda tarafga siljitganda xamma bitlar mos ravishda ungga siljiydi. Agarda ung tarafga siljitganda belgisi yuk ma’nosi tugri kelsa, unda katta razryadga nul ma’nosi yoziladi. Agarda ung tarafga siljitganda belgisi bor ma’nosi tugri kelsa, unda razryadga belgilari saklanib koldiriladi. yeslab kuring: manfiy butun sonlar katta razryadning birga barobar Bilan kursatiladi. Sho’nday kilib, agarda siljitayotgan son ma’nosi manfiy bo’lsa, unda xar bita siljitishda katta razryadga 1 ma’nosi kuyiladi, agarda musbat bo’lsa unda -0 kuyiladi.
Unga va chapga siljitishda chetki bitlar yukoladi. Shunday kilib, bu yerda siklli emas sijtish bajariladi va bitningyukolgan ma’nosini bilsa bo’ladi.
kuyidagi dasto’rda unga va chapka siljitishi ko’rsatiladi. Siljitishdagi ma’no birga teng deb olinadi, ya’ni fakat kichik razryad ma’nosi « start boshlangandan» 1 ga teng buladi, a kolganlari esa 0 ga teng buladi. Xar bir sakkiz chapka siljitishni bajargandan kegin dasturda kichik sakkiz razryadni kursatadi. Kegin kursatilgan protsess kaytalanadi.
Endigi paytda val uzgaruvchisiga 1 kuyilmaydi 128 kuyiladi va u ikkilik kodida
1000 0000 yoziladi. Va albatta siljitish endi chapka emas a unga siljitiladi.
G’G’ << VA >> Siljitish operatorining foydalanilishi.
using System;
class ShiftDemo { public static void
Main( ) { int val q 1;
int t;
int i;
for ( i -0; i < 8; iQQ ) {
for (tq128; t > 0; t q tG’2 ) {
if (( val & t ) 1q0) Console.Write ( “1”);
if (( val & t ) qq 0) Console.Write C ”0”}; }
Console. WriteLine { ); val - val « 1; G’G’ Chapka siljitish.
}
Console.Write ( );
Val q128;
for ( i q0; i < 8; iQQ ) {
for ( tq128; t > 0; t q tG’2 ) {
if (( val & t ) 1q0) Console.Write ( “1”);
if (( val & t ) qq 0) Console.Write C ”0”);
Console.WriteLine ( );
Val q val » 1; G’G’ Ungga siljitish
bo’ dasturning natiyjasi Quyidagicha
0 0 0 0 0 0 0 1
0 0 0 0 0 0 1 0
0 0 0 0 0 1 0 0
0 0 0 0 1 0 0 0
0 0 0 1 0 0 0 0
0 0 1 0 0 0 0 0
0 1 0 0 0 0 0 0
1 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0
0 1 0 0 0 0 0 0
0 0 1 0 0 0 0 0
0 0 0 1 0 0 0 0
0 0 0 0 1 0 0 0
0 0 0 0 0 1 0 0
0 0 0 0 0 0 1 0
0 0 0 0 0 0 0 1
Ikkilik sonak sonlar razryadlari 2 sonini darajasini tashkil etadi, unda siljitish operatorlarini 2 ga kupaytirish yoki bulishda foydalansa buladi. Albatta bu tugri bo’ladi agarda birinchi yoki ikkinchi tarafdan ( yukoladi) ma’noli bitlar kursatilmasa.
Masalan:
G’G’ Ciljitish operatorlarini 2 ga kupaytirishda yoki
bulishda foydalanilishi.
using System;
class Mult Div
{ public static void Main( ) {
int n;
nq10;
Console. WriteLine ( « n o’zgaro’vchining ma’nosi: « Q n);
G’G’ 2 ga kupaytiramiz n qn << 1;
Console.WriteLine ( “ n o’zgaro’vchisining ma’nosi nqn*2: “ Q n dan kegin);
G’G’ 4 ga kupaytiramiz n qn << 2;
Console.WriteLine ( “ n o’zgaro’vchisining ma’nosi nqn*4: “ Q n dan kegin);
G’G’ 2 ga bo’lamiz n qn << 1;
Console.WriteLine ( “ n o’zgaro’vchisining ma’nosi nqnG’2: “ Q n dan kegin);
G’G’ 4 ga bo’lamiz;
Console.WriteLine (
“ n o’zgaro’vchisining ma’nosi nqnG’4: “ Q n dan kegin);
Console.WriteLine ( );
G’G’ Oldingi xolatini keltiramiz;
Console.WriteLine ( “ n o’zgaro’vchisining ma’nosi : “ Q n );
G’G’ 30 marotaba 2 ga kupaytiramiz.
n q n <<30; G’G’ Afsus: berilganlar yukotildi.
Sonsole.WriteLine (
” n o’zgaro’vchisining ma’nosi 30 razryadga chapka siljitish : “ Q n);
bo’ dasturning natiyjasi kuyidagicha
n o’zgaro’vchining ma’nosi: 10;
n o’zgaro’vchisining ma’nosi nqn*2: dan kegin 20;
n o’zgaro’vchisining ma’nosi nqn*4: dan kegin 80;
n o’zgaro’vchisining ma’nosi nqnG’2: dan kegin 40;
n o’zgaro’vchisining ma’nosi nqnG’4: “ dan kegin 10;
n o’zgaro’vchisining ma’nosi : 10;
n o’zgaro’vchisining ma’nosi 30 razryadga chapka siljitgandan sung: -214748364 8
Itibor beringki, dasturning oxirgi katori bajarilgannan kegin natiyjasiga.
10 sonini chapka 30 razryadga siljitgandan so’ng ( ya’ni 2 ga kupaytirilgannan kegin) axborotlar yukoladi, sababi int tipiga ajratilgan shu sonning ma’nosi kursatilgan diapazonnan tashkarisida kursatilib turibdi. Xozir siz sonning manfiy ma’nosini krib turibsiz va bu katta razryadga bir kuyilishidan kelib chikadi a bo’ esa int tipii uchun belgi sifatia foydalaniladi. Shuning natiyjasida son manfiy sonbo’lib kabil etilgandek bo’ladi. Bu dasturdan kurinib turibdiki 2 ga kupaytirishda yoki bulishda ixtiyotkorlik bilan siljitishni bajarish.
Do'stlaringiz bilan baham: |