¿Por qué es un char 1 byte long en C? ¿Por qué no es 2 bytes o 4 bytes de largo?

¿Cuál es la lógica básica detrás de él para mantenerlo como 1 byte? Sé que en Java, un char es 2 bytes de largo. La misma pregunta para ti.

OriginalEl autor daniyalahmad | 2015-05-11

6 Comentarios

  1. 22

    char es de 1 byte en C porque es así lo especifiquen en las normas.

    La más probable de la lógica. el (binario) la representación de un char (en el juego de caracteres estándar) puede encajar en 1 byte. En el momento de la primaria el desarrollo de C, los más comúnmente disponibles estándares fueron ASCII y EBCDIC que se necesita 7 y 8 bits de codificación, respectivamente. Así, 1 byte fue suficiente para representar a todo el conjunto de caracteres.

    OTOH, durante el tiempo Java entró en la foto, los conceptos de extendido charcater conjuntos y unicode estaban presentes. Así que, para ser a prueba de futuro y el apoyo de extensibilidad, char fue dado 2 bytes, que es capaz de manejar extendido valores de conjunto de caracteres.

    Sí, de hecho :-).
    Por supuesto, incluso allí jodido… una de 16 bits char no es capaz de representar todos los caracteres Unicode.
    No sólo eso, sino que, si bien la intención puede haber sido para evitar ser inglés-céntrica, en muchos de los casos de uso de UTF-16 va a terminar siendo más voluminoso que UTF-8, incluso para los idiomas que utilizan muchos de los personajes que estarían representados de manera más compacta en UTF-16, debido a que gran parte del texto que las máquinas de proceso está diseñado para ser legible por máquina, en lugar de legible, y legibles por máquina texto es generalmente ASCII.

    OriginalEl autor Sourav Ghosh

  2. 5

    ¿Por qué un char tener más de 1byte? Un char normalmente representa un carácter ASCII. Sólo echar un vistazo a una tabla ASCII, sólo hay 256 caracteres en la (extended) Código ASCII. Por lo que necesita sólo para representar los números de 0 a 255, lo que equivale a 8 bits = 1byte.

    Echar un vistazo a una Tabla ASCII, por ejemplo, aquí: http://www.asciitable.com/

    Eso C. Cuando Java fue diseñado se prevé que en el futuro sería suficiente para que cualquier personaje (también Unicode), que se celebrará en 16 bits = 2bytes.

    OriginalEl autor Nidhoegger

  3. 2

    Cuando C fue desarrollado (el primer libro fue publicado por sus desarrolladores en 1972), los dos principales estándares de codificación de caracteres se ASCII y EBCDIC, que eran 7 y 8 bits de codificaciones de caracteres, respectivamente. Y la memoria y espacio en disco fueron tanto de mayor preocupación en el tiempo; C fue popularizado en las máquinas de 16 bits de espacio de direcciones, y el uso de más de un byte para las cadenas que hubiera sido un desperdicio.

    Por el tiempo de Java llegó (a mediados de la década de 1990), algunos con visión fueron capaces de percibir que un idioma pueda hacer uso de una internacional stnadard para la codificación de caracteres, y así Unicode fue elegido para su definición. Memoria y espacio en disco fueron menos de un problema.

    OriginalEl autor arcy

  4. 2

    El lenguaje C estándar define una máquina virtual donde todos los objetos ocupan un número integral de resumen unidades de almacenamiento compone de un número fijo de bits (especificado por el CHAR_BIT macro en los límites.h). Cada unidad de almacenamiento debe ser direccionables de forma única. Una unidad de almacenamiento se define como la cantidad de almacenamiento ocupado por un único carácter y el carácter básico set1. Por lo tanto, por definición, el tamaño de la char tipo 1.

    Finalmente, estos abstracto unidades de almacenamiento tienen que ser asignados en el hardware físico. Las arquitecturas más comunes de utilizar individualmente direccionables de 8 bits, bytes, por lo que char objetos generalmente se asignan a una sola de 8-bit byte.

    Por lo general.

    Históricamente, los bytes de los tamaños han sido en cualquier lugar de 6 a 9 bits de ancho. En C, el char debe ser de tipo al menos 8 bits para representar todos los caracteres del conjunto de caracteres, por lo que para manejar una máquina con 6 bits, bytes, un compilador puede tener para asignar una char objeto en dos nativos de la máquina de bytes, con CHAR_BIT ser 12. sizeof (char) todavía es 1, por lo que los tipos con el tamaño de la N se asignan a 2 * N nativo de bytes.



    1. El carácter básico conjunto se compone de todas las 26 letras en mayúsculas y en minúsculas, de 10 dígitos, signos de puntuación y otros caracteres gráficos y caracteres de control, tales como saltos de línea, tabulaciones, alimentos, etc., todo ello encaja cómodamente en 8 bits.

    El carácter fundamental establecidos en un sistema ASCII podría encajar fácilmente en siete bits; sospecho char se requiere de al menos ocho porque cuando C fue inventado octetos se empieza a emerger como un estándar común, nadie los usa de siete bits unidades de almacenamiento, y doblándose hacia atrás para apoyar vagamente-imaginables de la máquina con siete bits de almacenamiento direccionable de unidades no parece que vale la pena.
    Estás en lo correcto; el carácter básico se ajusta en 7 bits (de ahí que se adapta cómodamente a 8). Los 8 bits fue utilizado originalmente como un bit de paridad para la comprobación de errores (tanto en el comm líneas y en la memoria). Sin embargo, el estándar de C mandatos que char tipos de ocupar al menos 8 bits, independientemente de la cantidad de bits que se necesita para representar los caracteres básicos.
    Me pregunto si de 8 bits, se utiliza en lugar de 7 para permitir la comprobación de la paridad, o si 8 fueron utilizados, ya que era más fácil tener un número par, y la comprobación de la paridad fue añadido como una «tenemos este bit y bien podemos intentar hacer algo con ella»? Un octeto puede guardar cómodamente dos en base 16 o de base 10 valores, o cuatro valores de base-4; un sexteto convenientemente podrían mantener dos base-8 o tres valores de base-4. Un septeto podría un poco-sorta celebrar dos en base 10 de los valores o de la base 11 de valores, pero no tan convenientemente como un octeto.

    OriginalEl autor John Bode

  5. 0

    Usted no necesita más de un byte para representar la totalidad de la tabla ascii (128 caracteres).

    Pero existen otros tipos de C que tienen más espacio para contener datos, como int tipo (4 bytes) o largo doble tipo (12 bytes).

    Todos estos contienen valores numéricos (incluso chars! incluso si los mismos están representados como «letras», que son «números», usted puede comparar, agregar…).

    Estos son sólo diferentes tamaños estándar, como cm y m de longitud, .

    OriginalEl autor vmonteco

Dejar respuesta

Please enter your comment!
Please enter your name here