C программирующий типы данных

Если я правильно понимаю, мы хотим сделать: для каждого числа x в диапазоне проверьте, равна ли какая-либо из его цифр digit 5.

Как мы это делаем ?

Одна вещь, которую мы могли бы сделать, - привести строку digit =>, а затем проверить, существует ли подстрока «5». Но это наивное решение, требующее больше памяти и времени для хранения всех цифр в строке (а не нескольких байтов, необходимых для представления существующего целого).

Таким образом, разумнее было бы постоянно извлекать наименее значащую цифру (digit = x % 10), проверять if digit == 5, а затем делить наименее значимую цифру для повторения (x //= 10 WHILE x > 0).

5
задан cherouvim 4 May 2009 в 18:39
поделиться

6 ответов

Раньше у компьютеров было мало памяти. Это было главной причиной, почему у вас были разные типы данных. Если вам нужна переменная для хранения только небольших чисел, вы можете использовать 8-битный символ вместо 32-битного. Однако память сегодня дешева. Следовательно, эта причина менее применима в настоящее время, но все равно застряла.

Однако имейте в виду, что каждый процессор имеет тип данных по умолчанию в том смысле, что он работает на определенной ширине (обычно 32-битной). Таким образом, если вы используете 8-битный символ, значение должно быть расширено до 32-битного и обратно для вычисления. Это может немного замедлить ваш алгоритм.

1
ответ дан 18 December 2019 в 12:01
поделиться

В общем, существуют алгоритмы и конструкции, которые являются абстракциями, а типы данных помогают в реализации этих абстракций. Например, существует высокая вероятность того, что вес обычно представляется как рациональное число, которое лучше всего реализовать в хранилище в форме числа с плавающей запятой / двойного числа, т. Е. Числа, которое имеет прецизионную часть.

Надеюсь, это поможет.

0
ответ дан 18 December 2019 в 12:01
поделиться

char - это наименьший адресуемый кусок памяти - хорошо подходит для работы с буферами данных, но не может содержать более 256 различных значений (если char равно 8 биты, что обычно) и, следовательно, не очень хорошо для численных расчетов. int обычно больше, чем char - больше подходит для вычислений, но не так подходит для манипуляций на уровне байтов.

10
ответ дан 18 December 2019 в 12:01
поделиться

Remember that C is sometimes used as a higher level assembly language - to interact with low level hardware. You need data types to match machine-level features, such as byte-wide I/O registers.

From Wikipedia, C (programming language):

C's primary use is for "system programming", including implementing operating systems and embedded system applications, due to a combination of desirable characteristics such as code portability and efficiency, ability to access specific hardware addresses, ability to "pun" types to match externally imposed data access requirements, and low runtime demand on system resources.

3
ответ дан 18 December 2019 в 12:01
поделиться

int - это "натуральный" целочисленный тип, его следует использовать для большинства вычислений.

char по сути является байтом; это самый маленький адресуемый блок памяти. char имеет , а не 8-битную ширину на всех платформах, хотя в большинстве случаев это так.

0
ответ дан 18 December 2019 в 12:01
поделиться

Стандарт предписывает очень мало ограничений для char и int :

  • A char должен иметь возможность хранить Значение ASCII, то есть 7-битовое минимальное значение (EDIT: CHAR_BIT составляет не менее 8 в соответствии со стандартом C). Это также наименьший адресуемый блок памяти.

  • int имеет ширину не менее 16 бит и является «рекомендуемым» целочисленным типом по умолчанию. Эта рекомендация оставлена ​​для реализации (ваш компилятор C).

1
ответ дан 18 December 2019 в 12:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: