Міністерство освіти і науки, молоді та спорту України
Національний університет „Львівська політехніка”
Звіт
з лабораторної роботи № 2
з дисципліни: “Програмування (частина 3)”
на тему: “ Перетворення типів даних ”
Варіант [1,2] (v1 , w3 , v5 , w0)
Мета роботи: Дослідження методів та засобів явного і неявного перетворення типів даних.
Постановка задачі: Дослідити методи та засоби явного і неявного перетворення типів даних. Розробити алгоритм розв’язання задачі, і підтвердити роботу алгоритму програмною реалізацією.
Завдання 1
Алгоритм розв’язання задачі:
#include <stdio.h>
#include <conio.h>
int main()
{
typedef unsigned int type_0;
typedef unsigned short int type_1;
typedef unsigned long int type_2;
typedef signed short int type_3;
typedef signed int type_4;
typedef signed long int type_5;
typedef bool type_6;
typedef char type_7;
typedef wchar_t type_8;
typedef float type_9;
typedef double type_10;
typedef long double type_11;
type_8 x0=0;
type_0 x1=26;
type_5 x2=2;
type_5 x3=3;
type_4 x4=4;
type_2 x5=5;
type_2 x6=6;
type_9 x7=7;
type_10 x8=8;
type_5 x9=9;
type_0 x10=10;
type_2 x11=11;
x1 = x1 - 0xFFFFFFFA;
x3 = 'a' + x0 - x2;
x7 = x4 + x5 + x6 * 0.1;
x8 = x9 + x10 - x11 * 10;
printf("x0: ");
unsigned char *vx0 = (unsigned char *)(&x0);
for (int i = 0; i < sizeof(x0); i++)
printf("%02X ", vx0[i]);
printf("\n");
printf("x1: ");
unsigned char *vx1 = (unsigned char *)(&x1);
for (int i = 0; i < sizeof(x1); i++)
printf("%02X ", vx1[i]);
printf("\n");
printf("x2: ");
unsigned char *vx2 = (unsigned char *)(&x2);
for (int i = 0; i < sizeof(x2); i++)
printf("%02X ", vx2[i]);
printf("\n");
printf("x3: ");
unsigned char *vx3 = (unsigned char *)(&x3);
for (int i = 0; i < sizeof(x3); i++)
printf("%02X ", vx3[i]);
printf("\n");
printf("x4: ");
unsigned char *vx4 = (unsigned char *)(&x4);
for (int i = 0; i < sizeof(x4); i++)
printf("%02X ", vx4[i]);
printf("\n");
printf("x5: ");
unsigned char *vx5 = (unsigned char *)(&x5);
for (int i = 0; i < sizeof(x5); i++)
printf("%02X ", vx5[i]);
printf("\n");
printf("x6: ");
unsigned char *vx6 = (unsigned char *)(&x6);
for (int i = 0; i < sizeof(x6); i++)
printf("%02X ", vx6[i]);
printf("\n");
printf("x7: ");
unsigned char *vx7 = (unsigned char *)(&x7);
for (int i = 0; i < sizeof(x7); i++)
printf("%02X ", vx7[i]);
printf("\n");
printf("x8: ");
unsigned char *vx8 = (unsigned char *)(&x8);
for (int i = 0; i < sizeof(x8); i++)
printf("%02X ", vx8[i]);
printf("\n");
printf("x9: ");
unsigned char *vx9 = (unsigned char *)(&x9);
for (int i = 0; i < sizeof(x9); i++)
printf("%02X ", vx9[i]);
printf("\n");
printf("x10: ");
unsigned char *vx10 = (unsigned char *)(&x10);
for (int i = 0; i < sizeof(x10); i++)
printf("%02X ", vx10[i]);
printf("\n");
printf("x11: ");
unsigned char *vx11 = (unsigned char *)(&x11);
for (int i = 0; i < sizeof(x11); i++)
printf("%02X ", vx11[i]);
printf("\n");
getch();
return 0;
}
Результати виконання програми
Завдання 2
Алгоритм розв’язання задачі:
#include<stdio.h>
#include<conio.h>
int main ()
{
int x= 026050;
float y= 5.26e+2;
int v1 = static_cast< char > (x)+11;
printf("%d %x %c \n", v1,v1,v1);
int v5=*reinterpret_cast<char*> (&x) +2;
printf("%d %x %c \n\n", v5,v5,v5);
char w0 =*(reinterpret_cast<char*>(&y)+2)+12;
printf("%x %u %d \n",w0,w0,w0);
short w3=*reinterpret_cast<short*>(&y) + 1;
printf("%x %u %d \n", w3,w3,w3);;
return 0;
}
Результати виконання програми:
Контрольні питання
1.
Оголошено змінні:
signed char sch;
unsigned char uch;
double dх;
Які неявні перетворення типів будуть виконані:
sch = uch + dx;
Виберіть зі списку справа необхідні перетворення і запишіть їх номери в порядку зростання через кому (наприклад: а,б,в).
а)short→char
б)long→char
в)int→char
г)float→char
д)double→char
е)short→int
ж)long→int
з)char→int
и)float→int
і)double→int
к)short→float
л)long→float
м)char→float
н)int→float
о)double→float
п)short→double
р)long→double
с)char→double
т)int→double
ф)float→double
Визначити результат виконання фрагменту програми. Відповідь пояснити.
2.
int x=0XC17C0000;
printf("%f",* reinterpret_cast<float*> (&x));
4.
float x=2670.05;
//2670.0510 = 0XA6E.0CCCCC16
printf("%d",*reinterpret_cast<short*> (&x));
3.
int x=0XC17C0000;
printf("%c ",* reinterpret_cast<char*> (&x)+1);
5.
float x=2670.05;
//2670.0510 = 0XA6E.0CCCCC16
printf("%d", static_cast<int> (x));
Відповіді
с)char→double
д)double→char
2. -15.750000
3. 0
4. -7987
5. 2670
Висновок
В результаті виконання лабораторної роботи я освоїв основні методи та засоби явного та неявного представлення типів даних та використав ці знання для виконання прикладних програм.