###### tags: `UNIAT` `Progra 2` `C++` # Code Progra 2 Binary <style> html, body, .ui-content { font-family:'consolas'; } </style> ![](https://i.imgur.com/rjl4SHm.png) ## 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`!` ![image alt](http://ecomputernotes.com/images//thumb498-Truth-table-for-OR--AND-and-NOT-operations-021f25a7b786909762d06962d3dfaee0.jpg) ### 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 - ![](https://i.imgur.com/2Alau9N.jpg) - 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; } ```