# 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:

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
```