# Lista 0 (25 lutego 2021), grupa KBa ###### tags: `ask21` `ćwiczenia` `kba` ## 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!** Za listę przysługują punkty uznaniowe (maksymalnie 3). :::danger | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | | --------------------:| --- | --- | --- | --- |:---:|:---:| --- |:---:| | Andriy Bernad | X | X | | | | | | | 2, Z1 -> 2 | Wojciech Bogucki | | | | | | | | | 0 -> 0 | Michał Doros | | | X | X | X | X | | | 4, Z6 -> 3 | Marko Golovko | X | X | X | X | | | X | | 5, Z7 -> 3 | Magdalena Jarecka | | | X | | X | | | | 2 -> 1 | Heorhii Karpenko | X | X | | | | | | | 2, Z2 -> 2 | Szymon Kosakowski | | | | | | | | | 0 -> 0 | Izabella Kozioł | X | X | X | | X | | X | | 5 -> 2 | Franciszek Malinka | X | X | X | X | X | X | X | X | 8, Z3 -> 3 | Filip Pazera | | | | | | | | | 0 -> 0 | Kacper Puchalski | | | | | | | | | 0 -> 0 | Michał Siwiec | | | | | | | | | 0 -> 0 | Kacper Solecki | X | X | X | X | X | X | X | | 7, Z5 -> 3 | Andrzej Tkaczyk | X | X | X | X | | | | | 4, Z4 -> 3 | Łukasz Wasilewski | | | | | | | | | 0 -> 0 | Vladyslav Yablonskyi | | | | | | | | | 0 -> 0 | Jakub Zając | X | X | X | X | X | X | X |==X==| 8, Z8 -> 3 | Adam Zyzik | | | | | | | | | 0 -> 0 ::: ## Zadanie 1 :::info Autor: Andrzej Bernad ::: 1. $42_8 = 100010_2 = 22_{16} = 34_{10}$ 2. $255_8 = 10101101_2 = AD_{16} = 173_{10}$ 3. $3047_8 = 11000100111_2 = 627_{16} = 1575_{10}$ 4. $140336_8 = 1100000011011110_2 = C0DE_{16} = 49374_{10}$ :::spoiler Liczbę z systemu base_8 możemy zapisać w systemie dwójkowym na 3 bitach. Liczbę z systemu base_16 możemy zapisać w systemie dwójkowym na 4 bitach. ::: ## Zadanie 2 :::info ~~Autor: Izabella Kozioł~~ Autor: Grzegorz Karpenko ::: $22_{16} + 8_{16} = 2A_{16}$ $73_{16} + 2C_{16} = 9F_{16}$ $7F_{16} + 7F_{16} = FE_{16}$ $C2_{16} + A4_{16} = 166_{16}$ ## Zadanie 3 :::info Autor: Franciszek Malinka ::: ```c= uint32_t x, k; x &= ~(1<<k); // zerowanie k-tego bitu x |= (1<<k); // ustawianie k-tego bitu x ^= (1<<k); // negacja k-tego bitu ``` ## Zadanie 4 :::info Autor: Andrzej Tkaczyk ::: ```c= #include<stdio.h> int main(){ int x, y; scanf("%d %d", &x, &y); int a = x << y; int b = x >> y; // x = -1, y = 1, z = -1 ;; >> ;; int(-1 / 2) = 0 int c = x & ((1 << y) - 1); // 100000000..0000 -1 => 011111..11 int d = (x + (1 << y) - 1) >> y; // x /2^y * 2^y ;; x & (-(1 << y)) printf("%d\n%d\n%d\n%d\n", a, b, c, d); return 0; } ``` > [name=Maksymilian Debeściak] Mam alternatywen rozwiązanie zadania :::spoiler oiwehgoweighowigeh ::: ## Zadanie 5 :::info Autor: Kacper Solecki ::: ```c= bool notPowerOfTwo(uint32_t x){ uint32_t y = x; y |= (y >> 16); y |= (y >> 8); y |= (y >> 4); y |= (y >> 2); y |= (y >> 1); y = ((y & 1) ^ 1); return ((x & (x - 1)) | y); // 100...00 & 011...11 = 0 // 1...1... & 1...... != 0 } ``` > [name=Krystian Bacławski] Alternatywne rozwiązanie: :::spoiler ```c= bool notPowerOfTwo(uint32_t x){ return ((x - 1) & x) | ((x - 1) & M); // M = 0x8000_0000 (największa potęga dwójki, która mieści się w uint32_t) // 0 - 1 = 0xFFFF_FFFF // x == 0 => (x - 1) & M = 0xffff_ffff & M = M // x <= M => (x - 1) & M = 0 // x > M => M } ``` ::: ## Zadanie 6 :::info Autor: Michał Doros ::: ```c= uint32_t convert(uint32_t x) { uint32_t x1 = ((0x0000ffff & x) << 16) | ((0xffff0000 & x) >> 16); return ((0x00ff00ff & x1) << 8) | ((0xff00ff00 & x1) >> 8); } uint32_t convert2(uint32_t x) { uint32_t x1 = x << 24; uint32_t x2 = (0x0000ff00 & x) << 8; uint32_t x3 = (0x00ff0000 & x) >> 8; uint32_t x4 = x >> 24; return x1 + x2 + x3 + x4; } ``` ## Zadanie 7 :::info Autor: Marek Golovko ::: * **0** Null char (koniec napisu) * **4** End of Transmission (Jego przeznaczeniem jest wskazanie zakończenia transmisji, która mogła zawierać jeden lub więcej tekstów Ctrl + D) * **7** Bell (elektromechaniczny dzwonek) * **10** Line Feed (znak nowego wiersza '\n') * **12** Form Feed (znak kontrolny ASCII dzielący stronę) https://pl.wikipedia.org/wiki/ASCII#Tabela_kod%C3%B3w_ASCII ## Zadanie 8 :::success Autor: Jakub Zając ::: :::info Jakie ograniczenia standardu `ASCII` przyczyniły się do powstania **`UTF-8`**? Wyjaśnij zasadękodowania znaków do postaci binarnej `UTF-8` i zapisz poniższy ciąg znaków w systemie szesnastkowym:<br/>"Proszę zapłacić 5€!". ::: - `UTF-8` - system kodowania Unicode, który wykorzystuje między $1$ a $4$ bajty do zakodowania jednego znaku oraz jest wpełni kompatybliny z `ASCII`, - `Unicode` - komputerowy zestaw znaków mający w zamierzeniu obejmować wszystkie pisma używane na świecie. `UTF-8` wyparł `ASCII` ponieważ `UTF-8` zawiera więcej możliwych kombinacji którymi możemy zaprezentować znaki, jednocześnie przez fakt wstecznej kompatybilności `UTF-8` z `ASCII` pomógł wymienić starszy system. Kodowanie znaków `Unicode` do `UTF-8`: 1. Weź reprezentację znaku w Unicode, 2. Uzupełniu wiodącymi zerami do pełnego bajtu, 3. Użyj jednego z odpowiadających wzoru: ![](https://i.imgur.com/cxGWotV.png) A -> 0100 0001 ć -> U+0107 -> 0b00100-000111 -> 11000100 10000111 -> 0xc487 ```python= s = 'Proszę zapłacić 5€!' s.encode('utf-8') # Prosz\xc4\x99 zap\xc5\x82aci\xc4\x87 5\xe2\x82\xac! s.encode('utf-8').hex() # 0x50726f737ac499207a6170c582616369c4872035e282ac21 ```