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

Что имеет ввиду Страуструп? - C++

Восстановить пароль Регистрация
 
BigLow
55 / 55 / 2
Регистрация: 07.07.2013
Сообщений: 345
14.08.2013, 19:06     Что имеет ввиду Страуструп? #1
Цитата Страуструпа, Язык программирования C++. Специальное издание:

Беззнаковые (unsigned) целые типы идеальны для трактовки блоков памяти как
битовых массивов. Использование unsigned вместо int с целью заполучить лишний
бит для представления целых положительных значений почти всегда является
неудачным решением.
Т.е. если нужны только беззнаковые целые, то unsigned - неудачное решение ?


А попытки гарантировать положительность числовых
значений объявлением целой переменной с модификатором unsigned опровергаются
правилами неявных преобразований типов (§С.6.1, §С.6.2.1).
если правильно понял, то в арифметических операциях unsigned может потеряться?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.08.2013, 19:06     Что имеет ввиду Страуструп?
Посмотрите здесь:

C++ Задача:Страуструп. 4.11.4
C++ Задание из книги Р.Лафоре. Что автор имел ввиду?
C++ Страуструп
C++ Страуструп
Страуструп. задание C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
0x10
2425 / 1597 / 232
Регистрация: 24.11.2012
Сообщений: 3,919
14.08.2013, 19:09     Что имеет ввиду Страуструп? #2
Программа компилируется без ошибок и предупреждений, при этом в функцию f попало некорректное значение, несмотря на тип unsigned.

C++
1
2
3
4
5
6
7
8
9
10
11
#include <iostream>
 
void f(unsigned n)
{
    std::cout << n << std::endl;
}
 
int main()
{
    f(-1);
}
Kuzia domovenok
 Аватар для Kuzia domovenok
1882 / 1737 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
14.08.2013, 19:10     Что имеет ввиду Страуструп? #3
Цитата Сообщение от BigLow Посмотреть сообщение
Т.е. если нужны только беззнаковые целые, то unsigned - неудачное решение ?
почему?
Цитата Сообщение от BigLow Посмотреть сообщение
если правильно понял, то в арифметических операциях unsigned может потеряться?
нет, это значит, что
C++
1
2
3
4
unsigned char a=0;
unsigned char b=1;
unsigned char c=a-b;//с=255
char d=c;//d=-1
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11801 / 6780 / 765
Регистрация: 27.09.2012
Сообщений: 16,833
Записей в блоге: 2
Завершенные тесты: 1
14.08.2013, 19:22     Что имеет ввиду Страуструп? #4
Цитата Сообщение от 0x10 Посмотреть сообщение
некорректное значение, несмотря на тип unsigned.
Значение корректно
0x10
2425 / 1597 / 232
Регистрация: 24.11.2012
Сообщений: 3,919
14.08.2013, 19:28     Что имеет ввиду Страуструп? #5
Croessmah, предлагаю не придираться к словам, и так понятно о чем я говорил.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11801 / 6780 / 765
Регистрация: 27.09.2012
Сообщений: 16,833
Записей в блоге: 2
Завершенные тесты: 1
14.08.2013, 20:39     Что имеет ввиду Страуструп? #6
Цитата Сообщение от 0x10 Посмотреть сообщение
Croessmah, предлагаю не придираться к словам, и так понятно о чем я говорил.
Понятно. Вот с signed:
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
#include <numeric>
 
void f(int n)
{
    std::cout << n << std::endl;
}
 
int main()
{
    f(std::numeric_limits<unsigned int>().max());
}
аргумент корректен - это ошибка программиста.
Yandex
Объявления
14.08.2013, 20:39     Что имеет ввиду Страуструп?
Ответ Создать тему
Опции темы

Текущее время: 13:39. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru