# Lista 0 (25 lutego 2021), grupa pwit ###### tags: `ask21` `ćwiczenia` `pwit` ## Deklaracje Gotowość rozwiązania zadania należy wyrazić poprzez postawienie X w odpowiedniej kolumnie! Jeśli pożądasz zreferować dane zadanie (co najwyżej jedno!) w trakcie dyskusji oznacz je znakiem ==X== na żółtym tle. **UWAGA: Tabelkę wolno edytować tylko wtedy, gdy jest na zielonym tle!** Tabelka zawiera tylko osoby zapisane do grupy. Osoby oczekujące proszone są o wpisanie się do osobnej tabelki poniżej. :::warning Z tej listy pojedyńczy student może otrzymać maks 2. punkty (bonusowe). Tabelka służy do poinformowania, kogo można tymi bonusami obdarzyć. ::: :::danger | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | | --------------------:| --- | --- | --- | --- |:---:|:---:| --- |:---:| |Wojciech Adamiec | X | X | X | | X | | X | X | |Kacper Bajkiewicz | | | | | | | | | |Bartłomiej Hildebrandt| | | | | | | | | |Dominik Komła | | | | | | | | | |Aleksandra Kosińska | X | X | X | | X | X | X | | |Oleś Kulcewicz | | | | | | | | | |Damian Lukas | | | | | | | | | |Michał Mikołajczyk | X | X | X | | X | | | | |Mateusz Opala | | X | X | X | X | | | | |Łukasz Orawiec | | | | | | | | | |Szymon Pielat | X | X | X | | X | | | | |Łukasz Pluta | X | X | X | X |==X==| | X | | |Kamil Puchacz | X | X | X | x | X | | | | |Magdalena Rzepka | X | X | X | | X | ==X==| | | |Cezary Stajszczyk | X | X | X | X | X | X | X | | |Jakub Szajner | | | | | | | | | |Bartosz Troszka | | | | | | | | | |Miłosz Urbanik | X | X | X | X | X | X | | | Tabelka dla osób oczekujących na zapis. | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | | --------------------:| --- | --- | --- | --- |:---:|:---:| --- |:---:| | | | | | | | | | | ::: ## Zadanie 1 :::info Autor: Michał Mikołajczyk ::: >Przekształć każdą z podanych liczb z systemu ósemkowego na system binarny, szesnastkowy i dziesiętny: - $42_8 = 100\space010_2 = 0010\space0010_2 = 22_{16} = 34_{10}$ - $255_8 = 010\space101\space101_2 = 1010\space1101_2 = AD_{16} = 173_{10}$ - $3047_8 = 011\space000\space100\space111_2= 0110\space0010\space0111_2 = 627_{16} = 1575_{10}$ - $140336_8= 001\space100\space000\space011\space011\space110_2 = 1100\space0000\space1101\space1110_2 = C0DE_{16} = 49374_{10}$ ## Zadanie 2 :::info Autor: Mateusz Opala ::: 1.2A 2.9F 3.7F+7F=FE 4.166 ![](https://i.imgur.com/16NFoK1.png) :O ## Zadanie 3 :::info Autor: Aleksandra Kosińska ::: Wyzeruj $k$-ty bit zmiennej $x$: ```c x &= ~(1<<k); ``` Ustaw $k$-ty bit zmiennej $x$: ```c x |= 1<<k; ``` Zaneguj $k$-ty bit zmiennej $x$: ```c x ^= 1<<k; ``` ## Zadanie 4 :::info Autor: Kamil Puchacz ::: ``` uint32_t A(uint_32t x, uint32_t y){ return x << y; } uint32_t B(uint_32t x, uint32_t y){ return x >> y; } uint32_t C(uint_32t x, uint32_t y){ return x & ((1 << y) - 1) } uint32_t D(uint_32t x, uint32_t y){ return (x >> y) + ((X << (32 - y)) > 0) } ``` Hipoteza: wynik = ((x+(1<<(y-1)))>>y) bierzemy liczbę dodajemy do niej połowę naszego modulo i przesuwamy bitowo o y. Uwaga: problem dla "dużych" x i y Przykład 1: x = 26 x = 0b(11010), y = 2 sufit(x/4) = 7 wynik = Przykład 2: x = 0b(11001), y = 2 problem: wynik poprawny to 7, algorytm daje odpowiedź 6 Poprawka: wynik=((x+(1<<y)-1)>>y) komentarz: x=a*(1<<y)+b dla b=0, wynik=a, dla b>0: wynik=(a*(1<<y)+b+(1<<y)-1)>>y, gdzie b+(1<<y)-1>=(1<<y),więc wynik=a+1 **Pytanie**: czy umiemy rozwiązać to zadanie dla x typu int32_t (a nie uint32_t). Czy poniższy kod działa? ``` uint32_t A(int_32t x, uint32_t y){ return x << y; } ``` Zakłady, że x*2^y mieści się w typie int32_t. Łatwiejsze pytanie. Załóżmy, że x < 0 oraz liczby x i 2*x mieszczą się w typie int32_t. Pokażemy, że 2*x jest równe x << 1. x = 0b(1a_30...a_0) x = -2^31 + a_30*2^30 + ... + a_0 * 2^0 "x << 1" = -2^31*a_30 + 2^30*a_29 + ... + 2*a_1 Gdyby a_30 było == 0 to by oznaczało, że 2x nie mieści się w int32_t. Pomysł: (x jest typu int32_t) $\lceil x/2^y \rceil=\lfloor\frac{x+(2^y - 1)}{2^y}\rfloor$ Gdy x < 0 to poniższe wyrażenie "działa": a =`(x + (1 << y) - 1) >> y` Gdy x >= 0 to trzeba je poprawić, bo "nie działa" dla "dużych" x. Poprawka b = `(x + ((1 << y) - 1U) >> y` i trzeba umieć zakodować warunek: x < 0 ? a : b | ## Zadanie 5 :::info Autor: Łukasz Pluta ::: return ((x == 0) || (x & (x - 1))); LUB ((x-1) & (1 << 31)) | (x & (x - 1)) ## Zadanie 6 :::info Autor: Magdalena Rzepka ::: **Big endian** - to forma zapisu danych, w której najbardziej znaczący bajt umieszcza się jako pierwszy. **Little endian** - to forma zapisu danych, w której najmniej znaczący bajt umieszcza się jako pierwszy. ![](https://i.imgur.com/zM2m7t1.png) ![](https://i.imgur.com/B899rY2.png) 8 bitów = 1 bajt 32 / 8 = 4 ```c uint32_t x; uint32_t first, second, third, fourth; first = (x & 0x000000ff) << 24; second = (x & 0x0000ff00) << 8; third = (x & 0x00ff0000) >> 8; fourth = (x & 0xff000000) >> 24; uint32_t answer = first | second | third | fourth; ``` 0bmaska_bitowa ## Zadanie 7 :::info Autor: Cezary Stajszczyk ::: **ASCII** - siedmio bitowy system kodowania znaków; każdej liczbie przyporządkowany jest znak. **Kody sterujące** - pierwsze 32 kody, nie odpowiadają żadnemu drukowalnemy znakowi, tylko służą do sterowania urządzeniem. Kody sterujące ASCII: - 0 - NULL - 4 - EOT (end of transmission) - 7 - sygnał dźwiękowy - 10 - przesunięcie o jeden wiersz - 12 - przesunięcie o jedną stronę ## Zadanie 8 :::info Autor: Wojciech Adamiec ::: **UTF-8** (8-bit Unicode Transformation Format) – system kodowania, wykorzystujący od 1 do 4 bajtów do zakodowania pojedynczego znaku, w pełni kompatybilny z ASCII. Jest najczęściej wykorzystywany do przechowywania napisów w plikach i komunikacji sieciowej. Tablica ASCII ma tylko 128 znaków - do wielu celów to jest zdecydowanie za mało, UTF-8 rozwiązuje ten problem. Kodowanie zależy od tego o jakim znaku mówimy. Dla odpowiednich przedziałów kodów korzystamy z tabeli: ![alt text](https://i.imgur.com/kS5LBGy.png "Logo Title Text 1") Tekst do zakodowania: *Proszę zapłacić 5€!* 50 72 6f 73 7a c4 99 20 7a 61 70 c5 82 61 63 69 c4 87 20 35 e2 82 ac 21 Dla przykładu popatrzmy na €: 1. Kod dla € to U+20AC. 2. Jest to przedział między U+0800 a U+FFFF, więc potrzebujemy 3 bajtów. 3. $20AC_{16} = 0010 \space 0000 10\space10 1100_2$. 4. Korzystamy z tabeli w taki sposób, że w miejsce każdego $x$ wstawiamy kolejne bity. 5. Dostajemy na koniec takie kodowanie: $1110 \space 0010 \space 1000 \space 0010 \space 1010 \space 1100$ 6. Co konwertujemy do systemu szesnastkowego: $1110 \space 0010 \space 1000 \space 0010 \space 1010 \space 1100 = E2 \space 82 \space AC$
{"metaMigratedAt":"2023-06-15T20:17:00.468Z","metaMigratedFrom":"Content","title":"Lista 0 (25 lutego 2021), grupa pwit","breaks":true,"contributors":"[{\"id\":\"522a70ee-1724-47d3-9c70-f9371042b3a7\",\"add\":5468,\"del\":1588},{\"id\":null,\"add\":242,\"del\":191},{\"id\":\"e590c4e9-d2ff-4dba-bb0d-8a4fb5bfdba6\",\"add\":342,\"del\":11},{\"id\":\"864b3d8d-7963-49f4-bd91-03275dcf79ee\",\"add\":1184,\"del\":7},{\"id\":\"13f8be52-cde1-45f8-8b7e-07489f1fb074\",\"add\":819,\"del\":217},{\"id\":\"a8091a89-bcfc-4a8e-b2f7-6e15635a2489\",\"add\":479,\"del\":8},{\"id\":\"33f7cf83-26e8-4c30-a8bb-0654c52aac3c\",\"add\":372,\"del\":94},{\"id\":\"ef19520e-ae88-41f5-a570-1caaafb8021b\",\"add\":401,\"del\":14},{\"id\":\"eb2843ae-c717-415b-a115-1a9f09bdbeda\",\"add\":170,\"del\":6},{\"id\":\"7e772eea-0218-4866-ab63-cb17444119b2\",\"add\":4,\"del\":4}]"}
Expand menu