Форум программистов, компьютерный форум 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),середина остаётся неизменной,т.е получаем в итоге массив B {9 2 5} Вот создал второй массив и ещё одну переменную j и на этом завис((где то должно быть A/2,но не помню где,думаю ещё один цикл for должен быть,подскажите #include <iostream> using... http://www.cyberforum.ru/cpp-beginners/thread249239.html
C++ Элементарные 2ва упрожнения
Помогите плиззз в понедельник сдавать нужно(((((( Задачи решаются в турбо С 1 В массиве Z найти сумму четных чисел меньше 10, причем Z натуральные числа. 2 Определить является ли значение целочисленной переменной x четным. Если да то вывести значение x, если же нет то напечатать НЕТ.
C++ Вычеслить минимальный элемент массива С
Вычеслить минимальный элемент массива С и его порядковый номер. (С--действительные числа) (Массив С) парни,помогите пожалуста,завтра уже надо сдать,а как решать я не знаю.....=( Добавлено через 43 минуты Люююди,помогите.......... Добавлено через 25 минут Ну хоть кто нибудь......
C++ редактор звуковых файлов http://www.cyberforum.ru/cpp-beginners/thread249231.html
ку всем!у мя такая проблемка...дали тему курсовика:программа-редактор звуковых файлов...а я не знаю с чего начать...порекомендуйте книжку какую нить или алгоритм...)
C++ Интересная головоломка 1.С помощью текстового редактора создать файл который содержит текст.Длина ряда с текстом не должна превышать 80 символов.Это входной файл. 2.Программа должна 1.Информацию входного файла записать в выходной файл. 2.Определить количество символов в выходном файле,количество повторений каждого символа из введенного пользователем ряда в входном файле. 3.Имя входного файла задает пользователь в... подробнее

Показать сообщение отдельно
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
он переведет правильно, но знак минус тоже выведет, так и должно быть?)
 
Текущее время: 04:56. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru