ANSI C 7

ANSI C 7



2 TYPY, OPERATORY I WYRAŻENIA

możemy zapisać w bardziej zwartej postaci

if (c != ’\n’) s[i++] = c;

Trzecim przykładem do rozważenia niech będzie standardowa funkcja strcat(s,t), która dowiązuje tekst pochodzący z argumentu t do końca tekstu w argumencie s. Zakłada ona, że istnieje wystarczająco dużo miejsca, aby pomieścić tekst wynikowy. Tak jak ją tu napisaliśmy, nie zwraca ona żadnej wartości; standardowa wersja biblioteczna funkcji strcat zwraca wskaźnik do wynikowego ciągu znaków.

/* strcat: dowiąż tekst z t do końca tekstu w s;

tablica s musi być dostatecznie duża */ void strcat(char s[], char t[])

{

int i, j; i = j = 0;

while (s[i] != ’\0’) /* znajdź koniec tekstu w s */ i++;

while ((s[i++] = t[j++j) != ’\0’) /* przepisz tekst */

}

Każdy znak z tablicy t jest przepisywany do tablicy s, a więc zastosowanie operatom przyrostkowego do obu zmiennych (i oraz j) zapewnia, że wskażą one odpowiednit pozycje w następnym przebiegu pętli.    a

Ćwiczenie 2.4. Napisz inną wersję funkcji squeeze(s1 ,s2) tak, aby z tekstu w argumencie s1 usuwała każdy znak występujący w tekście argumentu s2. I

Ćwiczenie 2.5. Napisz funkcję any(s1,s2), która zwraca albo pozycję pierwszego wystąpienia dowolnego znaku z s2 w tekście argumentu s1, albo -1, jeśli tekst w s1 nie zawiera żadnego znaku z s2. (Standardowa funkcja biblioteczna strpbrk wykonuje to samo zadanie, ale zwraca wskaźnik do znalezionej pozycji.) 1


Operatory bitowe

Język C oferuje sześć operatorów pozwalających na manipulację bitami; można stosować jedynie do argumentów całkowitych, to znaczy char, short, int oraz \o& zarówno ze znakiem liczby, jak i bez znaku. Oto one:

2 9 OPERATORY BITOWE __________

powered by

mTśTo 1


& bitowa koniunkcja (AND),

I bitowa alternatywa (OR),

bitowa różnica symetryczna (XOR),

« przesunięcie w lewo,

» przesunięcie w prawo,

~ dopełnienie jedynkowe (operator jednoargumentowy).

Bitowy operator koniunkcji & jest często stosowany do „zasłaniania” pewnego zbioru bitów; na przykład w instrukcji

n = n & 0177;

zeruje się wszystkie oprócz 7 najmłodszych bitów wartości zmiennej n.

Bitowego operatora alternatywy | używa się do „ustawiania” bitów; na przykład w instrukcji

x = x | SET_ON;

ustawia się jedynki na tych bitach w zmiennej x, które w SET_ON są równe 1.

Operator bitowej różnicy symetrycznej ustawia jedynkę na każdej pozycji bitowej tam, gdzie bity w obu argumentach są różne, a zero tam, gdzie są takie same.

Należy zwrócić szczególną uwagę na różnice między bitowymi operatorami & i | a logicznymi operatorami && i 11, które powodują obliczenie (od lewej do prawej) wartości logicznej „prawda” lub „fałsz”. Dla przykładu: jeśli x równa się 1, a y równa się 2, to x & y ma wartość 0, natomiast x && y ma wartość 1.

Operatory « i » służą do przesuwania bitów argumentu stojącego po lewej stronie operatora (odpowiednio w lewo i w prawo) o liczbę pozycji określoną przez argument stojący po stronie prawej - jego wartość musi być dodatnia. A więc x«2 przesuwa wartość x w lewo o dwie pozycje, zwolnione bity wypełniając zerami (operacja ta jest równoważna z mnożeniem przez 4). Przy przesuwaniu w prawo wielkości bez znaku (unsigned) zwolnione bity zawsze są wypełniane zerami. Przesuwanie w prawo wielkości ze znakiem spowoduje na pewnych maszynach wypełnienie tych miejsc bitem znaku (przesunięcie „arytmetyczne”), na innych zaś zerami (przesunięcie „logiczne”).

Jednoargumentowy operator ~ powoduje dopełnienie jedynkowe wartości swego całkowitego argumentu: zamienia każdy bit 1 na 0 i odwrotnie. Na przykład w wyrażeniu

x = x & -077

nastąpi wyzerowanie ostatnich sześciu bitów x. Zauważ, że wyrażenie x & -077 nie zależy od długości słowa maszyny i dlatego powinno być stosowane zamiast na przykład wyrażenia X & 0177700, w którym zakłada się, że x jest wielkością 16-bitową. Taka przenośna postać operacji nie pociąga za sobą dodatkowych kosztów, albowiem

77


Wyszukiwarka

Podobne podstrony:
ANSI C 9 TYPY, OPERATORY I WYRAŻENIA Zmienne i stałe są podstawowymi obiektami danych, jakimi posł
ANSI C 0 2 TYPY, OPERATORY I WYRAŻENIA Kwalifikatory signed (ze znakiem liczby) i unsigned (bez zn
ANSI C 1 2 TYPY, OPERATORY I WYRAŻENIA Stała znakowa ’’ reprezentuje znak o wartości zero, tzw. z
ANSI C 2 2 TYPY, OPERATORY I WYRAŻENIA_____— kiej zmiennej, jest poprawną wartością wyliczenia. Zm
ANSI C 3 2 TYPY, OPERATORY I WYRAŻENIA_______ W tablicy 2.1 na końcu tego rozdziału podano prioryt
ANSI C 4 2 TYPY, OPERATORY I WYRAŻENIA__.______ n = 0; for (i = 0; s[i] >= ’0’ && s[i]
ANSI C 5 2 TYPY. OPERATORY I WYRAŻENIA • Następnie, jeśli którykolwiek z argumentów ma kwalifikato
ANSI C 6 2 TYPY, OPERATORY I WYRAŻENIA unsigned long int next = 1; I* rand: daj pseudo-losowo licz
ANSI C 8 2 TYPY, OPERATORY I WYRAŻENIA________ -077 jest wyrażeniem stałym, które może być obliczo
ANSI C 9 2 TYPY, OPERATORY I WYRAŻENIA______________ „weź i, dodaj 2, a następnie umieść wynik z p
ANSI C 0 2 TYPY, OPERATORY I WYRAŻENIA struktury; będą szczegółowo opisane w rozdz. 6 razem z oper
SWScan00058 102 Kontrakty terminowe / opcje co możemy zapisać jako: Wyrażenia (SC-Fj) oraz (Ą-Sj) re
skanuj0011 miernik był podłączony za pomocą przewodów miedzianych, zbudowane ogniwo możemy zapisać:
skanuj0019 (26) „Czystą” hydrolizę tej soli (czyli tylko z udziałem cząsteczek H20!) możemy zapisać
image 037 Podsumowsmie 37 Analogicznie, dla sytuacji z rys. l.lOb, możemy zapisać prawą stronę
image 074 74 Pole bliskie anteny i jego znaczenie dla techniki antenowej W efekcie możemy zapisać ca
skanuj0019 (26) „Czystą” hydrolizę tej soli (czyli tylko z udziałem cząsteczek H20!) możemy zapisać

więcej podobnych podstron