Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Хитрости с указателями - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ задан текст http://www.cyberforum.ru/cpp-beginners/thread249243.html
Задан текст. Вводится построчно, максимальная длина каждой строки – 80 символов. Максимум может быть введено 20 строк. Ввод осуществляется до пустой строки или до максимального числа строк. Текст...
C++ обработка массива на С++ Дан массив A {3 4 2 1 5},необходимо сформировать второй массив B из суммы первого эемента и последнего (3 + 5),второго и предпоследнего (4+1),середина остаётся неизменной,т.е получаем в итоге массив... http://www.cyberforum.ru/cpp-beginners/thread249239.html
C++ Элементарные 2ва упрожнения
Помогите плиззз в понедельник сдавать нужно(((((( Задачи решаются в турбо С 1 В массиве Z найти сумму четных чисел меньше 10, причем Z натуральные числа. 2 Определить является ли значение...
C++ Вычеслить минимальный элемент массива С
Вычеслить минимальный элемент массива С и его порядковый номер. (С--действительные числа) (Массив С) парни,помогите пожалуста,завтра уже надо сдать,а как решать я не знаю.....=( Добавлено...
C++ редактор звуковых файлов http://www.cyberforum.ru/cpp-beginners/thread249231.html
ку всем!у мя такая проблемка...дали тему курсовика:программа-редактор звуковых файлов...а я не знаю с чего начать...порекомендуйте книжку какую нить или алгоритм...)
C++ Интересная головоломка 1.С помощью текстового редактора создать файл который содержит текст.Длина ряда с текстом не должна превышать 80 символов.Это входной файл. 2.Программа должна 1.Информацию входного файла записать в... подробнее

Показать сообщение отдельно
DiabloRossi
2 / 2 / 0
Регистрация: 09.02.2011
Сообщений: 49
27.02.2011, 14:48  [ТС]
Цитата Сообщение от lemegeton Посмотреть сообщение
Быдыщ?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <cstdio>
 
typedef unsigned int IntegerType;
int main(int argc, char *argv[]) {
  float number = 127.001;
 
  if (sizeof(IntegerType) < sizeof(number)) {
    printf("On your platform sizeof IntegerType is less than "
           "size of float. Please change definition of IntegerType.\n");
    return 1;
  }
 
  for (int i = sizeof(number) * 8 - 1;  i >=0; --i)
    printf("%d", (*(IntegerType*)(&number) & (1 << i)) >> i);
  printf("\n");
 
  return 0;
}
О, отлично..
Теперь пара вопросов по коду, если вы не против.
Вообще прога работает и так:
C++
1
2
3
4
5
6
7
8
9
10
11
#include <cstdio>
 
int main(int argc, char *argv[]) {
  float number = 127.001;
 
  for (int i = sizeof(number) * 8 - 1;  i >=0; --i)
    printf("%d", (*(int*)(&number) & (1 << i)) >> i);
  printf("\n");
 
  return 0;
}
Зачем в проге вот это:
C++
1
2
3
4
5
  if (sizeof(IntegerType) < sizeof(number)) {
    printf("On your platform sizeof IntegerType is less than "
           "size of float. Please change definition of IntegerType.\n");
    return 1;
  }
А также не против был бы, если бы вы объяснили, почему это именно так:
C++
1
int i = sizeof(number) * 8 - 1
Я так понимаю это мы берем кол-во элементов, умножаем на 8(ибо по 8 бит каждая цифра представится), зачем вычитаем 1? Вычитаем, потому что "." нас не интересует?
И как работает вот это:
C++
1
(*(IntegerType*)(&number) & (1 << i)) >> i
мы берем указатель на число флоат, приводим к типу int, а вот дальше для меня загадка)
C++
1
& (1 << i)) >> i
Добавлено через 20 минут
До кучи, еще вопрос)
Вот так перестает работать, после ввода вылетает, почему?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <cstdio>
 
int main(int argc, char *argv[]) {
 
    float number;
    printf("Enter you value:\n");
    scanf("%f", number);
 
    for (int i = sizeof(number) * 8 - 1;  i >=0; --i)
    printf("%d", (*(int*)(&number) & (1 << i)) >> i);
 
    return 0;
}
И еще, если в вашем варианте вместо числа 127.001, поставить число -127.001
он переведет правильно, но знак минус тоже выведет, так и должно быть?)
0
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru