Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
0 / 0 / 0
Регистрация: 18.12.2018
Сообщений: 11
1

Маленькие числа, какие для них типы существуют?

09.09.2020, 10:56. Показов 1116. Ответов 11

Author24 — интернет-сервис помощи студентам
гуляя по интернетам я заметил есть разные варианты написания int
существуют ли типа переменнных которые могу хранить в себе 0-255 значений ЧИСЕЛ, а не чудесный uint8_t который оказзывается не int, а char(из-за чего просто так нельзя присвоить такой переменной число (например 100))?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
09.09.2020, 10:56
Ответы с готовыми решениями:

Какие существуют типы компилляторной оптимизации?
What are some compiler optimizations that you know (ie. loop unrolling, constant folding, etc)? :)

Какие существуют типы вытяжек?
Какие существуют типы вытяжек? Знаю что есть подвесные вытяжки, плоские, слайдеры и настенные вытяжки. Есть ли какие-то еще типы вытяжек?...

Какие типы данных из перечисленных существуют в C#?
Помогите!!!! я не могу ответить....раз 15 уже пробовал

11
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12860 / 6725 / 1807
Регистрация: 18.10.2014
Сообщений: 17,025
09.09.2020, 10:59 2
Цитата Сообщение от NAPOK Посмотреть сообщение
который оказзывается не int, а char(из-за чего просто так нельзя присвоить такой переменной число (например 100))
??? char - это обычный маленький целочисленный тип, которому можно "просто так" присвоить 100. Следите за знаковостью только. Откуда вы взяли ваше "просто так нельзя"?
0
0 / 0 / 0
Регистрация: 18.12.2018
Сообщений: 11
09.09.2020, 11:09  [ТС] 3
Тогда почему я не могу банально перемножить две единицы?
C++ Скопировано
1
2
3
4
5
6
7
8
9
10
int main()
{
    uint8_t P;
    uint16_t N;
    uint32_t V;
    cin >> P;
    cin >> N;
    V = P * N;
    cout << V;
}
в итоге получается 49, а не 1
0
6770 / 4564 / 1843
Регистрация: 07.05.2019
Сообщений: 13,726
09.09.2020, 11:18 4
Цитата Сообщение от NAPOK Посмотреть сообщение
существуют ли типа переменнных которые могу хранить в себе 0-255 значений ЧИСЕЛ, а не чудесный uint8_t который оказзывается не int, а char(из-за чего просто так нельзя присвоить такой переменной число (например 100))?
Скорее всего, ты путаешь с выводом на экран при помощи std::cout, который воспринимает char и uint8_t как символы. А так, это точно такие же числа, как int

C++ Скопировано
1
2
3
4
5
6
7
uint8_t n = 100;
std::cout << n << ", " << uint32_t(n) << std::endl;
printf("%u\n", n);
 
n += 20;
std::cout << n << ", " << uint32_t(n) << std::endl;
printf("%u\n", n);
Добавлено через 51 секунду
Цитата Сообщение от NAPOK Посмотреть сообщение
Тогда почему я не могу банально перемножить две единицы?
То же самое касается std::cin

Добавлено через 4 минуты
C++ Скопировано
1
2
3
4
5
6
7
8
9
10
int main()
{
    uint8_t P;
    uint16_t N;
    uint32_t V;
    scanf("%hhu" , &P);
    std::cin >> N;
    V = P * N;
    std::cout << V;
}
0
Эксперт С++
 Аватар для Avazart
8483 / 6150 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
09.09.2020, 11:29 5
То что uint8_t выводится как символ а не как число это конечно удручает, но не критично.
Раньше этого типа не было и использовали char или unsigned char.

С другой стороны использование char целесообразно при больших объемах т.е. для выигрыша по памяти.
Касательно производительности скорее всего её не будет, скорее наоборот будет проигрыш так как обычно вычисления процессора заточены под int.
При этом всегда есть вероятность выйти за границы при вычисления.
Так что стоит подумать.
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12860 / 6725 / 1807
Регистрация: 18.10.2014
Сообщений: 17,025
09.09.2020, 11:56 6
Цитата Сообщение от NAPOK Посмотреть сообщение
Тогда почему я не могу банально перемножить две единицы?
Потому что вы даже и не пытаетесь перемножить "две единицы". cin >> P; читает из консоли символ '1', а не число 1. А символ '1' скорее всего соответствует числу 49. То есть вы перемножаете 49 и 1.

Это поведение не имеет никакого отношения к типу uint8_t или char как таковому. Это поведение оператора форматированного ввода >>.

P.S. Вы в своем исходном сообщении говорили о присваивании. А теперь вдруг привели код, в котором никакого присваивания нет.

---

Как правильно заметил Avazart, зачем вы вообще пытаетесь работать напрямую с малыми типами в вводе-выводе? Малые типы предназначены для экономии памяти при хранении больших объемов данных. А ввод-вывод нужно делать в типах int/unsigned int и не беспокоиться о таких засадах.
0
248 / 70 / 9
Регистрация: 22.07.2018
Сообщений: 321
09.09.2020, 11:58 7
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
scanf("%hhu" , &P);
Мы вам перезвоним.
0
09.09.2020, 12:02 8

Не по теме:

Цитата Сообщение от argcargv Посмотреть сообщение
Мы вам перезвоним.
Это ты о чём? Кому ты там собрался перезванивать?

0
 Аватар для SmallEvil
3791 / 2717 / 765
Регистрация: 29.06.2020
Сообщений: 9,983
09.09.2020, 12:17 9
Цитата Сообщение от NAPOK Посмотреть сообщение
Маленькие числа, какие для них типы существуют?
еще есть битовые поля
C++ Скопировано
1
2
3
4
5
6
struct{
    int i1 : 4;
    int i2 : 4;
    int i3 : 4;
    int i4 : 4;
};
четырехбитный int ))
4 ячейки по 4 бита = 2 байта

Добавлено через 8 минут
хотя что б размер структуры был 2 байта
C++ Скопировано
1
2
3
4
5
6
struct{
    char i1 : 4;
    char i2 : 4;
    char i3 : 4;
    char i4 : 4;
};
0
Диссидент
Эксперт C
 Аватар для Байт
27710 / 17328 / 3810
Регистрация: 24.12.2010
Сообщений: 38,979
09.09.2020, 14:11 10
Цитата Сообщение от NAPOK Посмотреть сообщение
почему я не могу банально перемножить две единицы?
Замечание интересное. Действительно, .char ведет себя не всегда как целое. Особенно в конструкции "cin >>". Так уж для cin перегрузили ">>"
Один из простейших выходов может быть таким
C++ Скопировано
1
2
3
4
5
uint8_t cin8() {
  unsigned int k;
  cin >> k;
  return (uint8_t) k;
}
Твой код тогда будет таким

C++ Скопировано
1
2
3
4
5
6
7
8
9
10
11
int main()
{
    uint8_t P;
    uint16_t N;
    uint32_t V;
     P = cin8();
     N = cin8();
    V = P * N;
    cout << V;
return 0;
}
0
 Аватар для SmallEvil
3791 / 2717 / 765
Регистрация: 29.06.2020
Сообщений: 9,983
09.09.2020, 14:35 11
Байт, годно.
Такое поведение с типами char присуще только
- стандартному вводу/ выводу
- функциям и классам работы с СИ строками
Ну а сами по себе встроенный целочисленные типы.
C++ Скопировано
1
2
3
4
5
unsigned char  ch1= 50;
unsigned char  ch2 = 2;
unsigned char  res = ch1 * ch2;
int ires = res;
cout<<ires;
то есть сами арифм. операции на типами uint8_t и т.п - такие же как и с int
0
30.09.2020, 13:02 12

Не по теме:

Цитата Сообщение от oleg-m1973 Посмотреть сообщение
Кому ты там собрался перезванивать?
Дак весь смысл в том, что не собирался.

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
30.09.2020, 13:02
Помогаю со студенческими работами здесь

Какие типы данных не подойдут для числа 128?
Здравствуйте. Какие типы данных не подойдут для числа 128? ( 1.bool;2.char;3.unsigned char;4.short;5.unsigned short;6.long;7.unsigned long)

Какие существуют библиотеки для ИИ на lisp?
Всем хорошего времени суток! Заинтересовала тема разработки искусственного интеллекта на lisp (предпочтительнее common lisp), ...

Какие существуют загрузчики для UEFI?
Нужен UEFI загрузчик для Arch. Стандартный GRUB почему-то не видит, вроде и ставил по всем правилам... Я сам склоняюсь к EFISTUB, пойдет?...

Какие полезные программы существуют для Windows 7?
Какие программы есть для Windows 7?

Какие существуют библиотеки для работы с сокетами?
Здравствуйте! Подскажите пожалуйста, какие существуют библиотеки для работы с сокетами.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему

Редактор формул (кликните на картинку в правом углу, чтобы закрыть)
Новые блоги и статьи
Контейнеризация ML моделей с помощью Docker и Kubernetes
Mr. Docker 14.03.2025
Перенос ML-моделей из лаборатории в продакшн сопровождается целым комплексом проблем. Нередко код, который отлично работает на локальной машине, отказывается функционировать в промышленной среде. . . .
Организация масштабируемого хранилища с Apache Cassandra
Codd 14.03.2025
Изначально разработанная в Facebook, а затем переданная Apache Software Foundation, Cassandra сочетает в себе принципы Amazon's Dynamo и Google's BigTable. Эта комбинация создает уникальную. . .
Kafka или Pulsar: Что лучше для потоковой обработки в Java
Javaican 14.03.2025
Среди множества решений для потоковой обработки данных Apache Kafka долгое время удерживала лидирующие позиции, став де-факто стандартом в индустрии. Однако в последние годы всё больше внимания. . .
Создание и использование компонентов в Vue 3
Reangularity 14.03.2025
Компонент в Vue - это автономный блок интерфейса, который содержит собственную разметку, логику и стили. Представьте себе кнопку, форму ввода или даже целую панель навигации - всё это можно оформить. . .
Vue 3: Создаем современное веб-приложение с Composition API
Reangularity 14.03.2025
В фронтенд-разработке Vue 3 выделяется своим прагматичным подходом. В отличие от React с его минималистичной философией "всё — JavaScript" или Angular с его всеобъемлющим корпоративным подходом, Vue. . .
Разработка контекстных меню в iOS
mobDevWorks 14.03.2025
С приходом iOS 13 Apple представила новый API для контекстных меню, который полностью заменил предыдущую технологию 3D Touch peek & pop. Хотя многие разработчики и пользователи испытывают ностальгию. . .
Лучшие практики оптимизации Docker Image
Mr. Docker 13.03.2025
Размер Docker-образа влияет на множество аспектов работы с контейнерами. Чем больше образ, тем дольше его загрузка в реестр и выгрузка из него. Для команд разработки, работающих с CI/ CD пайплайнами,. . .
Вопросы на собеседовании по Docker
Mr. Docker 13.03.2025
Ты сидишь напротив технического специалиста, и вдруг звучит вопрос про Docker Swarm или многоэтапные сборки. Пот на лбу? Не переживай, после этой статьи ты будешь готов ко всему! Эта статья будет. . .
Поиск текста в сносках : замена дефиса на тире или тире на дефис...
РоΜа 13.03.2025
Нужно было найти текст в сносках и заменить. Почему-то метод селекшн не сработал. . . пришлось гуглить. найденный на форумвба код пришлось править. Смысл - заменяет в сносках дефисы и тире на нужные. . . .
Real PATH definitions in bash scripts
jigi33 13.03.2025
Как поймать путь и путь к директории относительно запускаемого файла в BASH 1. поймать путь через вывод $(pwd) 2. более правильно - на основе realpath (см. скриншот)
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru
Выделить код Копировать код Сохранить код Нормальный размер Увеличенный размер