Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 5.00/104: Рейтинг темы: голосов - 104, средняя оценка - 5.00
187 / 180 / 25
Регистрация: 27.01.2012
Сообщений: 1,335

uint32, size_t и подобные им

01.09.2013, 10:53. Показов 21068. Ответов 41
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Собственно, в чем смысл данных типов, в отличие от обычных unsigned int, int и подобных им?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
01.09.2013, 10:53
Ответы с готовыми решениями:

Беззнаковый тип size_t: чем различие между size_t, uintptr_t, ptrdiff_t и intptr_t?
В чем вообще его смысл? Разве запись double a = {1,2,3}; int i = 1; *(a+i)+=1; значит, что мы перепрыгивам вперед по...

uint32 и UINT64
Господа, не подскажете ли, какие магические слова надо написать, чтобы начать использовать тип uint32? Мне не важно, как он называется...

Преобразование массива к uint32
Есть задание: создать массив случайных чисел (от -100 до 100) A, сделать массив B1 из A такой, чтобы был тип uint, сделать с помощью...

41
 Аватар для reisal78
944 / 687 / 230
Регистрация: 28.04.2013
Сообщений: 1,925
01.09.2013, 10:59
Использование memsize типов (таких как size_t, ptrdiff_t, INT_PTR) в 64-битных программах, вместо 32-битных типов (int, unsigned) позволяет:
  1. Построить компилятору более простой и, следовательно, более быстрый код, в котором будут отсутствовать лишние преобразования 32-битных и 64-битных данных. Особенно это полезно при работе с адресной арифметикой и индексации массивов.
  2. Избежать ряда ошибок при обработке большого объема входных данных, когда количество обрабатываемых элементов превышает количество UINT_MAX.
  3. Избежать ряда других, более специфичных ошибок.
  4. Сделать код более переносимым между 64-битными Windows и Linux системами, в которых используются различные модели данных. Так, например, в Linux системах для индексации больших массивов можно использовать тип unsigned long, а в Windows нет.
как то так )

Добавлено через 3 минуты
http://www.viva64.com/ru/a/0050/
1
 Аватар для Kuzia domovenok
4268 / 3327 / 926
Регистрация: 25.03.2012
Сообщений: 12,531
Записей в блоге: 1
01.09.2013, 12:50
Например, переносимость. Если использовать, например, unsigned int вместо size_t, программа будет работать только на 32разрядных системах! Например, придётся писать отдельную программу для 64х разрядных, например.
...например.
1
Ушел с форума
Эксперт С++
 Аватар для Убежденный
16481 / 7444 / 1187
Регистрация: 02.05.2013
Сообщений: 11,616
Записей в блоге: 1
01.09.2013, 12:57
uint32 - это тип фиксированного размера (32-бита). Иметь такие типы иногда очень желательно.
Например, вы передаете данные по сети и хотите быть уверенными, что на другой стороне
их тоже прочитают правильно. Независимо от версии компилятора и разрядности ОС.

А размер size_t (также, как и ptrdiff_t) варьируется, в зависимости от архитектуры.
На x86 size_t равен 4 байтам, а на x64 - уже восьми. Это помогает поддерживать
работу с объемами памяти соответствующего размера. Кроме того, название size_t
более описательно, чем int: видя функцию, которая возвращает size_t, сразу
становится понятно, что возвращается какой-то размер, а не просто число.
1
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
01.09.2013, 13:11
Цитата Сообщение от nexen Посмотреть сообщение
Собственно, в чем смысл данных типов, в отличие от обычных unsigned int, int и подобных им?
Не читая предыдущих сообщений скажу:
size_t - беззнаковый целый тип, гарантирующий правильную ( [0,размер массива] ) индексацию массива не зависимо от платформы. Грубо говоря - максимальный беззнаковый целый тип платформы.
uint32 - видимо имелось в виду uint32_t. Это беззнаковый целый тип, гарантирующий размерность ("ширину") переменной 32 бита.
unsigned int - так сказать, language-specific, просто беззнаковый целый тип, "ширина" которого может отличаться от платформы и ОС, т.е. например, компилируя 32-битное приложение "ширина" типа unsigned int будет равна 32-м битам, в 64-битном приложении "ширина" будет равна 64-м битам.
Остальное по-аналогии.
2
01.09.2013, 13:17

Не по теме:

Цитата Сообщение от Убежденный Посмотреть сообщение
Например, вы передаете данные по сети и хотите быть уверенными, что на другой стороне их тоже прочитают правильно. Независимо от версии компилятора и разрядности ОС.
Для этого надо передавать байты. Endianness же.

2
01.09.2013, 13:20

Не по теме:

Тут я не могу не согласится с OhMyGodSoLong. Пример не очень удачный..

1
01.09.2013, 13:20

Не по теме:

OhMyGodSoLong, для этого есть htonl/ntohl

1
Ушел с форума
Эксперт С++
 Аватар для Убежденный
16481 / 7444 / 1187
Регистрация: 02.05.2013
Сообщений: 11,616
Записей в блоге: 1
01.09.2013, 13:20
Цитата Сообщение от OhMyGodSoLong Посмотреть сообщение
Для этого надо передавать байты. Endianness же.
Согласен. Просто как пример.
А для реальной платформо-независимости лучше вообще XML/JSON...
1
01.09.2013, 13:23

Не по теме:

Цитата Сообщение от fasked Посмотреть сообщение
OhMyGodSoLong, для этого есть htonl/ntohl
Не думаю что кто-то применяет её для "преобразования" данных для последующей передачи.

1
Эксперт С++
 Аватар для fasked
5045 / 2624 / 241
Регистрация: 07.10.2009
Сообщений: 4,310
Записей в блоге: 5
01.09.2013, 13:26
Цитата Сообщение от castaway Посмотреть сообщение
Не думаю что кто-то применяет её для "преобразования" данных для последующей передачи.
Я просто не могу представить для чего еще их можно применять, потому что именно для этого они и сделаны:
htonl, htons, ntohl, ntohs - convert values between host and network byte order
0
~ Эврика! ~
 Аватар для OhMyGodSoLong
1258 / 1007 / 74
Регистрация: 24.07.2012
Сообщений: 2,002
01.09.2013, 13:28
Цитата Сообщение от fasked Посмотреть сообщение

Не по теме:

OhMyGodSoLong, для этого есть htonl/ntohl

Не по теме:

У которых нет стандартных вариантов для восьмибайтных величин. И которых нет на POSIX-несовместимых системах.

1
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
01.09.2013, 13:30
Цитата Сообщение от fasked Посмотреть сообщение
Я просто не могу представить для чего еще их можно применять, потому что именно для этого они и сделаны
Ты не совсем правильно понял то что я хотел донести.. Если есть функция для преобразования порядка байтов в "правильный" порядок, то это не значит что ей обязаны пользоваться все поголовно. Я к тому, что "матерые" программисты ей не пользуются передавая данные.
1
Эксперт С++
 Аватар для fasked
5045 / 2624 / 241
Регистрация: 07.10.2009
Сообщений: 4,310
Записей в блоге: 5
01.09.2013, 13:45
Цитата Сообщение от OhMyGodSoLong Посмотреть сообщение
У которых нет стандартных вариантов для восьмибайтных величин. И которых нет на POSIX-несовместимых системах.
В стандарте много чего нет, и всегда можно быстро набросать что-то подобное:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#define TYP_INIT 0 
#define TYP_SMLE 1 
#define TYP_BIGE 2 
 
unsigned long long htonll(unsigned long long src) { 
  static int typ = TYP_INIT; 
  unsigned char c; 
  union { 
    unsigned long long ull; 
    unsigned char c[8]; 
  } x; 
  if (typ == TYP_INIT) { 
    x.ull = 0x01; 
    typ = (x.c[7] == 0x01ULL) ? TYP_BIGE : TYP_SMLE; 
  } 
  if (typ == TYP_BIGE) 
    return src; 
  x.ull = src; 
  c = x.c[0]; x.c[0] = x.c[7]; x.c[7] = c; 
  c = x.c[1]; x.c[1] = x.c[6]; x.c[6] = c; 
  c = x.c[2]; x.c[2] = x.c[5]; x.c[5] = c; 
  c = x.c[3]; x.c[3] = x.c[4]; x.c[4] = c; 
  return x.ull; 
}
Передавать байтами, а потом склеивать это, как говорится, "те же яйца, только в профиль".
Цитата Сообщение от castaway Посмотреть сообщение
"матерые" программисты ей не пользуются передавая данные
Ну-ну
1
187 / 180 / 25
Регистрация: 27.01.2012
Сообщений: 1,335
01.09.2013, 13:46  [ТС]
Убежденный, int на x86 = 4, а на x64 = 8?
0
01.09.2013, 13:49

Не по теме:

Цитата Сообщение от fasked Посмотреть сообщение
Ну-ну
Вы изменитесь в моих глазах, если скажете что используете данную функцию при каждой передаче данных в сеть.

0
Ушел с форума
Эксперт С++
 Аватар для Убежденный
16481 / 7444 / 1187
Регистрация: 02.05.2013
Сообщений: 11,616
Записей в блоге: 1
01.09.2013, 13:50
Цитата Сообщение от nexen Посмотреть сообщение
Убежденный, int на x86 = 4, а на x64 = 8?
На Windows они равны. LLP64.
На счет других ОС - не поручусь.
1
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
01.09.2013, 13:51
Цитата Сообщение от nexen Посмотреть сообщение
Убежденный, int на x86 = 4, а на x64 = 8?
x86 - это 386, 486, 586, 686 и т.п.
А что такое x64 ?
1
01.09.2013, 14:05

Не по теме:

Цитата Сообщение от castaway Посмотреть сообщение
Вы изменитесь в моих глазах, если скажете что используете данную функцию при каждой передаче данных в сеть.
Теперь уже не использую, потому что в связи со сменой проекта работаю на гораздо более высоком уровне. Ну и к слову, "grep -R htonl ." по исходникам прошивки DDWRT для роутеров выдает достаточное количество совпадений, чтобы опровергнуть слова о "матерых" программистах. Относительно стандартное применение htonl-like функции выглядит так:
Code
1
2
3
./btstream.cpp:  *p = htonl(idx); p++;
./btstream.cpp:  *p = htonl(off); p++;
./btstream.cpp:  *p = htonl(len);

1
Модератор
Эксперт по электронике
8978 / 6744 / 921
Регистрация: 14.02.2011
Сообщений: 23,851
01.09.2013, 14:11
Цитата Сообщение от castaway Посмотреть сообщение
x86 - это 386, 486, 586, 686 и т.п.
А что такое x64 ?
x86 принято так называть 32 битные процессоры
в них не входит 8086, 8088, 80186, 80286 они не 32 битные
x64 соответственно 64битные
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
01.09.2013, 14:11
Помогаю со студенческими работами здесь

Отличие Uint32 от Int32
Господа, понимающие. Объясните, пожалуйста в чём отличие? Рихтер говорит int32 это числовой тип со знаком, а uint32 без знака. О...

Преобразование шестнадцатиричной последовательности в UInt32
Здравствуйте, не работает библиотека Globalization для преобразования hex в UInt32 using System.Globalization; for (int i = 0; i...

Преобразование UInt32 в UInt64. Ошибка MSDN?
Почему в справке msdn в таблице преобразования типов, НЕ написано что тип UInt32 можно без потерь преобразовать в UInt64. Это ошибка msdn,...

Преобразовать массив байтов (Byte[]) в целое без знака (UInt32)
Всем привет. У меня простой вопрос. Мне нужно преобразовать массив байтов (Byte) в целое без знака (UInt32). На С++ я бы сделал это...

Как из Uint64 переписать правые 32 раряда в число формата Uint32
Подскажите, как из Uint64 переписать правые 32 раряда в число формата Uint32, или левые 32, не важно в принципе)


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
PowerShell Snippets
iNNOKENTIY21 11.11.2025
Модуль PowerShell 5. 1+ : Snippets. psm1 У меня модуль расположен в пользовательской папке модулей, по умолчанию: \Documents\WindowsPowerShell\Modules\Snippets\ А в самом низу файла-профиля. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru