|
0 / 0 / 0
Регистрация: 28.06.2019
Сообщений: 4
|
||||||
Для чего в rand() использовано приведение типа к (unsigned int)?28.06.2019, 01:30. Показов 1213. Ответов 7
Метки нет (Все метки)
В учебнике Кернигана Ритчи "Язык программирования С" приведена функция rand() из стандартной библиотеки, которая генерирует псевдослучайные числа. Написано что она иллюстрирует приведение типов и что она переносима между системами. Вот её код:
0
|
||||||
| 28.06.2019, 01:30 | |
|
Ответы с готовыми решениями:
7
Определение типов. Приведение int к unsigned int Const unsigned int flags - для чего эти флаги? Поместить двоичный код, в веденной строке, в переменную типа int и unsigned int. |
|
163 / 70 / 39
Регистрация: 28.05.2019
Сообщений: 242
|
||
| 28.06.2019, 03:42 | ||
|
0
|
||
|
Mental handicap
1246 / 624 / 171
Регистрация: 24.11.2015
Сообщений: 2,429
|
|
| 28.06.2019, 09:18 | |
|
magbit, если речь об С99 то, мне кажется что здесь дело в том что бы оператор
% возвращал значение с правильным знаком, т.к. в Си знак результата был таким же как и знак делителя, в то время как результатом остачи от деления ожидался знак делителя. Т.к в Си оператор % - это не совсем тот modulus оператор.Т.е. если результат next / 65536 == -1 при касте к unsigned мы получали тот же -1 только в плюсом диапазоне что равно 4294967295, т.е. это тоже бинарное представление числа -1 == 0xFFFFFFFF.
1
|
|
|
0 / 0 / 0
Регистрация: 28.06.2019
Сообщений: 4
|
|
| 28.06.2019, 13:41 [ТС] | |
|
Да возможно это связано с делением по модулю, в книге как раз упоминается, что в разных системах оно было реализовано по разному, но только вот можно ли получить отрицательное число деля unsigned long int next на 65536, которое signed long int и при расширении до unsigned в старших битах будут всё так же нули. Результатом этого деления так же будет число у которого старшие 16 бит нули. При приведении его к 16 битам без знака эти нули просто обрезаются.
Единственное объяснение которое приходит в голову, это что 32768 записано как 16 битный инт со знаком и если его расширять до лонга, то оно расширится со знаком, то есть все старшие биты будут единицами. Но это звучит просто абсурдно. Эта функция rand приведена в книге в разделе про приведение типов и она там по сути именно из-за этого (unsigned int), а я хоть убей не понимаю зачем он там, соответственно видимо я что-то не понимаю в самом приведении типов.
0
|
|
|
Mental handicap
1246 / 624 / 171
Регистрация: 24.11.2015
Сообщений: 2,429
|
||
| 28.06.2019, 14:37 | ||
magbit, при касте к беззнаковому, знака быть не может. Потом почему вы решили что long int > unsigned int? Что вы так обострили внимание на этих 16 битах?
0
|
||
|
0 / 0 / 0
Регистрация: 28.06.2019
Сообщений: 4
|
|
| 28.06.2019, 17:14 [ТС] | |
|
Вот в том то и дело что я не понимаю. При касте к беззнаковому знака быть не может, но и при делении беззнакового делимого next тоже ведь знака быть не должно. Зачем тогда Ритчи заостряет внимание на приведении (unsigned int) если без него результат был бы абсолютно одинаковым во всех системах?
Добавлено через 20 минут Или давайте просто предположим, что приведения нет. У нас самый большой тип здесь unsigned long int у next. При каждой операции все операнды будут преобразованы к нему и только в конце при возврате он преобразуется в обычный int. Из производимых вычислений следует что у результата старшие 17 бит будут нулями, то есть при приведении не получится, что слишком большое число без знака превращается в отрицательное. Где тут что-то может пойти не так?
0
|
|
|
Mental handicap
1246 / 624 / 171
Регистрация: 24.11.2015
Сообщений: 2,429
|
||
| 28.06.2019, 18:28 | ||
|
0
|
||
|
0 / 0 / 0
Регистрация: 28.06.2019
Сообщений: 4
|
|
| 28.06.2019, 19:54 [ТС] | |
|
Эх, видимо Ритчи решил затралить таким образом своих потомков
У него самого уже не узнаешь, что он имел ввиду.Может быть лет через 10 до меня всё-таки дойдёт для чего там был этот треклятый (unsigned int). Буду надеяться на лучшее.
0
|
|
| 28.06.2019, 19:54 | |
|
Помогаю со студенческими работами здесь
8
Создать класс для работы с одномерными динамическими массивами значений типа unsigned int
Перевод массива unsigned char в число типа int
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение.
И на уровне агентов добавится между грибами или бактериями взаимодействий.
До того я пробовал подход через многомерные массивы,. . .
|
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути
Programma_Boinc 01.01.2026
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути
Сочетание глобально распределённой вычислительной мощности и инновационных. . .
|
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Налог на собак: https:/ / **********/ gallery/ V06K53e
Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf
Пост отсюда. . .
|
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop?
Ниже её машинный перевод.
После долгих разбирательств я наконец-то вернула себе. . .
|
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод
Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод.
Thinkpad X220 Tablet —. . .
|
|
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта
Симптом:
После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
|
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|