![]() |
нид хелп по С
народ оч нада срочно помогите с заданием :
1)в динамическом массиве лент определить количество лент, которые не содержат ни одной цифры 2)в целочисленного массиве каждый его элемент изменить, оставив значимыми лишь четыре младшие биты его двоичного представления (остальные битов нулевые) |
каких лент? чето я не знаю че это такое
|
ну ето перевод с укринского если без перевода то лента назыветса "стрічка", можна назвать "строки"
|
ай лолд. вы вообще на пары то ходили? из двух вариантов перевода (лента и строка) по программированию выбрать ленту... А вообще раздел специальный есть - повыше висит, прилепленный.
|
если ето сюда то незаметил сразу
|
Первое задание на чистом Си:
PHP код:
|
Второе задание на Си:
PHP код:
|
спасибо помог
|
Цитата:
sizeof(arr)/sizeof(int) плохо sizeof(arr)/sizeof(arr[0]) хорошо sizeof(arr)/sizeof(arr[0]) вернет size_t 32 битное значение в x32 системе и 64 битное в x64 но из за присваивания его переменной len типа int потеряете 32 старших бита в x64 системе не сможете обрабатывать большие массивы так как int и в x32 и в x64 32 бита в отличии от size_t результата операции sizeof которая на x32 32 бита а на x64 64 бита :) в первом задании у Вас тоже ахтунг с типами :) |
За поправки спасибо. На си вообще никогда не программировал практически, поэтому руководствовался правилом "нет предупреждений и программа работает - хорошо".
Цитата:
Цитата:
У меня система x64, sizeof(arr[0]) возвращает 4, и sizeof(int) - также 4, не вижу тут проблем. Попробовал в VS2008 и gcc. |
2 d_x
int i, len; for(i = 0, len = sizeof(arr)/sizeof(arr[0]); i < len; i++) //... sizeof(arr)/sizeof(arr[0]) это выражение после вычисления на x64 имеет размер 64 значащих бита потом в результате присваивания len = sizeof(arr)/sizeof(arr[0]) обрезаются старшие 32 бита результат будет неверный в len но на 32 битной системе с этим проблем не будет но могут быть другие :) sizeof(arr)/sizeof(arr[0]) вернет 32 значащих бита рассмариваемых как беззнаковое число но у Вас в len может оказатся отрицательное число после присваивания (если 31 бит включен будет он рассматривается как знак в len) так как у Вас len знаковая переменная то это условие i < len никогда не выполнится не будет ни одной итерации цикла :) |
Цитата:
Цитата:
Эта ситуация в рамках данной задачи нереальна по-моему. Если бы здесь была возможна такая ситуация, я бы использовал unsigned int. |
вот что бы об этом потом не думать и не рафакторить код под x64
можно сразу написать так size_t i, len; for(i = 0, len = sizeof(arr)/sizeof(arr[0]); i < len; i++) в зависимости от платформы меняет разрядность плюс беззнаковый :) |
2 d_x табличка пригодится
Код:
Тип Размерностьтипа наплатформеx32 / x64 Примечание |
| Время: 01:17 |