Если символы могут содержать то, что могут целые числа, тогда почему нужно использовать целые числа? - PullRequest
5 голосов
/ 02 сентября 2010

Почему мы вообще используем целые числа в C?

#include<stdio.h>
int main()
{
    char c=10;
    printf("%d",c);
    return 0;
}

То же, что и

#include<stdio.h>
int main()
{
    int c=10;
    printf("%d",c);
    return 0;

}

Ответы [ 8 ]

21 голосов
/ 02 сентября 2010

Технически все типы данных представлены 0 и 1.Итак, если они все одинаковы во внутреннем интерфейсе, зачем нам разные типы?

Ну, тип - это комбинация данных и операций, которые вы можете выполнять над данными.

У нас есть ints для представления чисел.Они имеют такие операции, как + для вычисления суммы двух чисел или - для вычисления разности.

Когда вы думаете о символе, в обычном смысле он представляет одну букву или символ вудобочитаемый формат.Возможность суммировать 'A' + 'h' не имеет смысла.(Даже если c позволяет вам это делать.)

Итак, у нас есть разные типы на разных языках, чтобы упростить программирование.Они по существу инкапсулируют данные и функции / операции, которые разрешено выполнять над ними.

Википедия содержит хорошую статью о системах типов.

11 голосов
/ 02 сентября 2010

Поскольку char содержит только цифры от -127 до 127

3 голосов
/ 02 сентября 2010

Символ может хранить только 8 бит, а целое число может иметь 16, 32 или даже 64 бита (long long int).

2 голосов
/ 02 сентября 2010

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

Число битов в int не фиксировано; Я считаю, что оно определяется как «естественное» значение для конкретной машины, т. Е. Количество битов, которыми легче / быстрее всего манипулировать с этой машиной.

Как уже упоминалось, все значения в компьютерах хранятся в виде последовательностей двоичных битов. Как эти биты интерпретируются, меняется. Их можно интерпретировать как двоичные числа или как код, представляющий что-то еще, например, набор буквенных символов или множество других возможностей.

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

Отказ от ответственности: все, что написано выше, это мое мнение или предположение. Дизайнеры C - единственные, кто действительно может ответить на этот вопрос.

Более простой, но вводящий в заблуждение ответ заключается в том, что вы не можете сохранить целочисленное значение 257 в char , но вы можете в int . натуральный

2 голосов
/ 02 сентября 2010

Вообще говоря, char означает наименьшую единицу разумного хранения данных на машине, а int - это "лучший" размер для обычных вычислений (например, размер регистра ). Размер любого типа данных может быть выражен как число char с, но необязательно как число int с. Например, на PIC16 от Microchip значение char составляет восемь битов, int равно 16 битам, а short long равно 24 битам. (short long должен быть самым тупым классификатором типов, который я когда-либо встречал.)

Обратите внимание, что char равен , а не обязательно 8 бит, но обычно это так. Следствие: каждый раз, когда кто-то заявляет, что это 8 бит, кто-то включит и назовет машину, где ее нет.

2 голосов
/ 02 сентября 2010

Попробуйте это:

#include <stdio.h>
int main()
{
    int c = 300;
    printf("%d", c);
    return 0;
}

#include <stdio.h>
int main()
{
    char c = 300;
    printf("%d", c);
    return 0;
}

Типы данных char, short, int, long и long long содержат (возможно) целые числа разных размеров, которые могут принимать значения до определенного предела. char содержит 8-битное число (которое технически не является ни signed, ни unsigned, но фактически будет одним или другим). Поэтому диапазон составляет всего 256 (от -127 до 128 или от 0 до 255).

Хорошей практикой является избегать char, short, int, long и long long и использовать int8_t, int16_t, int32_t, uint8_t и т. Д. Или даже лучше int_fast8_t, int_least8_t и т. Д.

1 голос
/ 02 сентября 2010

char cant содержит то, что могут целые числа.Не все.
По крайней мере, не так, как вы присваиваете значение char.Поэкспериментируйте с sizeof, чтобы увидеть, есть ли разница между char и int.

Если вы действительно хотите использовать char вместо int, вам, вероятно, следует рассмотреть char[] вместо этого и сохраните ASCII, основание 10, символьное представление числа.: -)

1 голос
/ 02 сентября 2010

Из-за

#include <stdio.h>

int main(int argc, char **argv)
{
        char c = 42424242;
        printf("%d", c); /* Oops. */
        return(0);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...