###### tags: `UNIAT` `Progra 2` `C++`
# Code Progra 2 Binary
<style>
html, body, .ui-content {
font-family:'consolas';
}
</style>

## Primitive types
|type|size ( bytes )|
|--|--|
|char| 1 |
|bool| 1|
|int| 4 |
|short| 2 |
|float| 4 |
|double| 8 |
# Datatype Modifiers
## Signed - unsigned
Con signo sin signo:
Signed -> Toma el primer bit como signo.
Unsigned -> Toma todos los bites como valores ( enteros positivos)
## Long
Aumenta la memoria de la variable cuando se utiliza como prefijo.
:::danger
Never exist:
- long char
- double int
- long float
:::
## Variables Types
| Type | Typical Bit Width | Typical Range |
|:---------------------- | ----------------- | ------------------------------- |
| char | 1byte | -127 to 127 or 0 to 255 |
| unsigned char | 1byte | 0 to 255 |
| int | 4bytes | -2147483648 to 2147483647 |
| unsigned int | 4bytes | 0 to 4294967295 |
| unsigned short int | 2bytes | 0 to 65,535 |
| short int | 2bytes | -32768 to 32767 |
| long int | 8bytes | -2,147,483,648 to 2,147,483,647 |
| signed long int | 8bytes | same as long int |
| unsigned long int | 8bytes | 0 to 4,294,967,295 |
| long long int | 8bytes | -(2^63) to (2^63)-1 |
| unsigned long long int | 8bytes | 0 to 18,446,744,073,709,551,615 |
| float | 4bytes | |
| double | 8bytes | |
| long double | 12bytes | |
# Binary
```cpp
using namespace std;
int main()
{
//cout<<"Hello World";
int number = 542;
int quotient =number; //cociente
int remainder =0; //reciduo
string a="";
while(quotient>0){
remainder = quotient%2;
quotient = quotient/2;
cout<<remainder<<" ";
}
cout <<"\n" <<a.length();
return 0;
}
```
# Binary operators
(Operadores binario)
* Binario -> base 2. (0,1)
* Decimal -> base 10. (0-9)
* Hexadecimal ->16. (0-F) 1, 2, 3, 4... 8, 9, A, B...E, F.
|Decimal|Binary|Hex|
|--|--|--|
|1|0000 0001|x01|
|2|0000 0010|x02|
| 5|0000 0101|x05|
|10|0000 1010|x0A|
|15|0000 1111|x0F|
## logic operators
OR`||` AND`&&` -NOT`!`

### Or operator: "|"
Muy similar al OR `||`
Con la diferencia de:
- :warning: **El Operador binario es: `|`**
- :warning: **Mientras que el logico es:** `||`
- Funciona a nivel de bits.
- Cada bit es tomado en cuenta por separado.
Cumple con la siguiente funcion:
por ejemplo:
|Var|Binary|Dec|
|--|--|--|
|`A`| 0000 1010|10|
|`B`| 0001 0011|19|
|`A|B`|0001 1011|27|
### AND operator "&"
Muy similar al AND `&&`
Con la diferencia de:
- :warning: **El Operador binario es:** `&`
- :warning: **Mientras que el logico es:** `&&`
- Funciona a nivel de bits.
- Cada bit es tomado en cuenta por separado.
Cumple con la siguiente funcion:
por ejemplo:
|Var|Binary|Dec|
|--|--|--|
|`A` | 0000 1010|10|
|`B` | 0001 0011|19|
|`A&B`|0000 0010|2|
### NOT operator "~"
Muy similar al NOT `!`
Con la diferencia de:
- Funciona a nivel de bits.
- Cada bit es tomado en cuenta por separado.
Cumple con la siguiente funcion:
por ejemplo:
|Var|Binary|Dec|
|--|--|--|
|`A` | 0000 1010|10|
|`~A`| 1111 0101|245|
## Hexadecimal
- Representacion base 16 de un numero.
|Hex|Binary|Dec|
|-- |--|--|
|01 | 0000 0001|1|
|02 | 0000 0010|2|
|03 | 0000 0011|3|
|...| ... |...|
|08 | 0000 1000|8|
|09 | 0000 1001|9|
|0A | 0000 1010|10|
|0B | 0000 1001|11|
|0C | 0000 1010|12|
|0D | 0000 1101|13|
|0E | 0000 1110|14|
|0F | 0000 1111|15|
|10 | 0001 0000|16|
|11 | 0001 0001|17|
|12 | 0001 0010|18|
|FF | 1111 1111|255|
|...| ... |...|
1 byte = 8 bits = char = FF
## Bitwise operator.
Recorren a nivel de bits el valor de una variable.
### shift left <<
Toma el valor en su forma binaria y lo recorre `n` cantidad de veces hacia la izquierda, en este ejemplo utilizamos 4 lugares:
```cpp
unsigned char value= 15;// 0000 1111
unsigned char result = value<<4 // 1111 0000
```
## shift right >>
Toma el valor en su forma binaria y lo recorre `n` cantidad de veces hacia la derecha, en este ejemplo utilizamos 4 lugares:
```cpp
unsigned char value = 144;// 1001 0000
unsigned char result = value>>4 // 0000 1001
```
## Uses
- Store colors.
- Store IP address.
- store each value
- calculate subnet mask
- 
- Store chmod permissions
- https://chmod-calculator.com/
source:
Bitwise https://en.wikipedia.org/wiki/Bitwise_operations_in_C
# Code
## Color RGBA to HEX
```cpp=
#include <iostream>
using namespace std;
int main (){
// 128 64 32 16 8 4 2 1
int a = 0xF0; // 1 1 1 1 1 1 1 1 = 255
// F F
//Init variables
unsigned char red = 244; // 0xF4 1111 0100
unsigned char green = 136; // 0x88 1000 1000
unsigned char blue = 80; // 0x50 0101 0000
unsigned char alpha = 255; // 0xFF 1111 1111
unsigned int colorRGBA =0; // 0000 0000 0000 0000 0000 0000 0000 0000
// bit = 0 or 1
// bytes = 8 bits 0000 0000
//Adding Red Value
colorRGBA = colorRGBA | red; // 0000 0000 0000 0000 0000 0000 1111 0100
colorRGBA = colorRGBA<<16; // 0000 0000 1111 0100 0000 0000 0000 0000
cout << hex << colorRGBA <<endl;
//Adding Green Value
unsigned int auxGreen =0;
auxGreen = auxGreen | green; // 0000 0000 0000 0000 0000 0000 1000 1000
auxGreen = auxGreen << 8; // 0000 0000 0000 0000 1000 1000 0000 0000
cout << hex << auxGreen<<endl;
//Adding Blue
unsigned int auxblue =0;
auxblue = auxblue | blue; // 0000 0000 0000 0000 0000 0000 0101 0000
cout << hex << auxblue<<endl;
//R 1111 0100 0000 0000 0000 0000 0000 0000
//G 0000 0000 1000 1000 0000 0000 0000 0000
//B 0000 0000 0000 0000 0101 0000 0000 0000
//A 0000 0000 0000 0000 0000 0000 1111 1111
colorRGBA = colorRGBA | auxGreen | auxblue;
colorRGBA = colorRGBA << 8;
colorRGBA = colorRGBA | alpha;
cout << colorRGBA <<endl;
//short version
colorRGBA = (red << 24) | ( green << 16 ) | (blue << 8) | alpha;
cout << colorRGBA <<endl;
return 0;
}
```
## Color RGBA to HEX short version
```cpp=
#include <iostream>
using namespace std;
int main (){
//Init variables
unsigned char red = 244; // 0xF4 1111 0100
unsigned char green = 136; // 0x88 1000 1000
unsigned char blue = 80; // 0x50 0101 0000
unsigned char alpha = 255; // 0xFF 1111 1111
unsigned int colorRGBA =0; // 0000 0000 0000 0000 0000 0000 0000 0000
//short version
colorRGBA = (red << 24) | ( green << 16 ) | (blue << 8) | alpha;
cout << colorRGBA <<endl;
return 0;
}
```