Red de conocimientos sobre prescripción popular - Remedios caseros - ¿En qué unidad está Delphi fillchar?

¿En qué unidad está Delphi fillchar?

Fillchar es el proceso estándar de la unidad del sistema Turbo/Borland Pascal. Su formato de uso es: fill char(var A Count bytes se les asigna el mismo valor.

Donde valor es el valor de relleno y solo puede ser un valor de un solo byte, como Byte, Char o Boolean. En Free Pascal se extendió ligeramente a FillChar(var X

count:Longint value) sin cambios en la funcionalidad.

[Ejemplo 1]: el carácter de relleno se suele utilizar para asignar valores iniciales a los datos.

Definir variables

Respuesta: Matriz [1..arrtype of 10]

Ejecutar fillchar(a, sizeof(a), 0)

Cuando el tipo de matriz es

1.real (similar a otros números reales) hace que todos los elementos en A se conviertan en 0.0.

2. Los números enteros (byte, palabra, entero largo y entero corto son todos iguales) son todos 0.

3. Booleano es todo falso.

4. Los personajes son todos #0.

Aquí se utiliza la función sizeof(a), su función es devolver el número total de bytes ocupados por la variable A, como se muestra en el ejemplo anterior:

Cuando el tipo de matriz is

1.realsizeof (a) tiene un valor de 60 (cada elemento ocupa 6 bytes, 10 elementos * * * ocupa 60 bytes).

Hearthfire

El valor de sizeof(a) es 40 (4 bytes por elemento, 40 bytes para 10 elementos * * *).

Dos veces

El valor de izeof(a) es 80 (8 bytes por elemento, 10 elementos * * *, 80 bytes).

Extendido

El valor de izeof(a) es 100 (cada elemento ocupa 10 bytes, 10 elementos * * * ocupa 100 bytes).

com

El valor de sizeof(a) es 80 (8 bytes por elemento, 10 elementos * * *, 80 bytes).

2.2.integer(word) sizeof(a (a) El valor es 20.

(Cada elemento ocupa 2 bytes, 10 elementos * * * ocupa 20 bytes)

El valor de 3 bytes (atajo) de tamaño de (a) es 10.

(Cada elemento ocupa 1 byte y 10 elementos * * * ocupan 10 bytes. )

4. El valor de tamaño de entero largo de (a) es 40 (4 bytes por elemento, 10 elementos 40 bytes * * *)

5. El elemento ocupa 1 byte, 10 elementos * * * representan 10 bytes)

El valor de charsizeof (a) es 10. >

(Cada elemento ocupa 1 byte, 10 elementos * * * ocupan hasta 10 bytes)

Entonces, el resultado del ejemplo 1 es llenar todos los elementos de la matriz A (todos los bytes) con 0. Cabe señalar que la interpretación de "0" es completamente diferente para diferentes tipos. de datos! Para números enteros o reales

En términos generales, si todos los bytes son 0, entonces el número también es 0. ;Para una cantidad booleana (un byte), 0 significa falso (no 0 significa verdadero). ), entonces la cantidad es falsa; el tipo de carácter a la derecha

En lo que respecta a la cantidad (un byte), 0 significa código ASCII. Caracteres con un valor de 0, por lo que el número es #0.

[Ejemplo 2]: Cambie fillchar(a, sizeof(a), 0) en el ejemplo anterior a

Fillchar( a, sizeof(a), 1), what. Cuál es el resultado?

Ejecutar fillchar(a, size(a), 1)

Cuando el tipo de matriz es

1.Boolean es todo verdadero (1). es un valor distinto de cero, lo que indica verdadero)

2. Los caracteres son todos #1.

3. Byte, entero corto

Cada elemento es de 1 byte, ambos son 1

4.entero, la palabra tiene 2 elementos por elemento Bytes, ambos son (257)10. Esto se debe a que

En una variable entera o de palabra, tanto el byte alto como el bajo se llenan con 1 (el número binario 1 se convierte en el número binario 0000001) y el resultado es:

Bytes altos y bytes bajos

15 14 13 12 11 10 9 8 | >

| 0 0 0 0 0 0 0 1

Obviamente la cantidad obtenida es (257)10 = (000000100001)2.

Si ejecutas Fillchar (a, size (a), 171), ¿cuál es el resultado?

Porque (171)10 = (1010111)2, es:

Byte alto y byte bajo

15 14 13 12 11 10 9 8

| 7 6 5 4 3 2 1 0

1 0 1 0 1 0 1 1 | , su valor es (-21589)10, porque los datos de tipo entero son un número con signo representado por complemento a dos, y el bit más alto es el bit de signo, representado por 0.

Positivo, 1 significa negativo, porque este número es un número negativo, por lo que su complemento es 1010111010101.

110101010101, su valor es -(214+212+265438. Para un cierto número de palabras, su valor es

(43947)10, porque los datos del tipo de palabra son los originales. code El número sin signo (número no negativo) representado es 101011111165438

+211+29+28+27+25+23+21+1)10=(43947)10;

5. Deseo

Cada elemento tiene 4 bytes. Después de implementar fillchar(a, size(a), 1), es (16843009) 10. Esto se debe a que, para cada elemento, después de llenarlo con 1, se convierte en:

Byte más alto, segundo byte alto

31 30 29 28 27 26 25 24 | 19 18 17 16

0 0 0 0 0 0 0 1 | 10 9

8 | 7 6 5 4 3 2 1 0

0 0 0 0 0 0 1 | Los datos de entero largo son un número con signo representado por su complemento. El bit más alto es el bit de signo, 0 significa positivo y 1 significa negativo. Como este número es positivo, su complemento, complemento y código original lo son todos.

0000000010000000100000001000001, su valor es (224+216+1)10 = (65438)

Si ejecuta fillchar(a, size(a), 255), ¿cuál es el resultado? ?

Dado que (255)10 = (1111165438)2, el complemento es 111654385438+01111111111, que es un número negativo.

El código inverso es 111111111165438. 01111111111165438, el código original es 100000000000000000.

6. Único

Cada elemento tiene 4 bytes, ambos son 2.3694272761724e-0038. Esto se debe a que, para cada elemento, el resultado del relleno con 1 es exactamente el mismo que el del código binario de tipo entero largo.

Sin embargo,

Un solo tipo "interpreta" estos datos de manera completamente diferente:

A. El bit más alto (bit 31) es el bit de signo del número entero, donde 0 es positivo y 1. es negativo.

B. Los siguientes 8 bits (bits 30 a 23) son el código de rango representado por el código de turno.

Los últimos 23 bits de c (bits 22 a 0) representan la mantisa.

El valor de d cantidad de precisión simple es: 2 exponente real * mantisa real.

(1), si código de pedido = 0000000, indicador real = -126, mantisa real = (0.) 2, ¿dónde? Representa el código binario (0 o 1) de la posición correspondiente obviamente, en ? Cuando todos son cero,

el valor de esta cantidad de precisión simple es 0.

②Si el código de clasificación es mayor que 00000000 y menor que 1111111, el índice real = código de clasificación-(127) 65438.

(3) INF (infinito) Si el código de secuencia = 111111, la mantisa ha alcanzado el límite superior y se considera infinita.

④Error de operación de punto flotante: si el código de secuencia = 11111111, la mantisa es (00000000000000000000,

1000000000000000000000000).

⑤ NAN (no es un número: no es A )

Número) Si el código de rango = 11111111, la mantisa es [1000000000000000, 1165438

A continuación analizamos el valor de un número de precisión simple (tipo único) cuyo código binario es 000000000100000010000001. ①Como máximo

El bit alto es 0, lo que indica un número positivo; ②El código de secuencia es 00000010. Si el número binario de 10 es 2, el exponente real = 2-127=-125, ③La mantisa es.

00000001000000010000001, la mantisa real = 1.00000000010000001000000001,

Cambiada a 10, la base es 1+2-7+2-15+2-23 = 1.00784313678741450781 25.

④El valor de este número de precisión única es +2-125 * 1.007431367 87414550786548+025 87762

7.

8. Para los tipos de colección, si el tipo de matriz = set' # '...z '

El resultado después de ejecutar fillchar(a, sizeof(a), 0): A es un conjunto vacío; Sizeof(a) da 120. ¿Por qué el valor de sizeof(a) es 120? Origen

Para los tipos de colección, dado que el rango de elementos se debe proporcionar de antemano (como ' # '...z'), si cada elemento existe en una colección se puede determinar simplemente con 0 o 1. Registro, 0 significa que el elemento no pertenece a un determinado conjunto.

En conjunto, 1 indica que el elemento pertenece a un conjunto, es decir, solo 1 bit binario puede indicar si un elemento pertenece a un conjunto, por lo que solo necesitamos escribir una cadena de códigos binarios según corresponda. al número de secuencia del elemento, se pueden marcar todas las normas.

Si los elementos del archivo adjunto pertenecen a una colección. Pero aquí hay un problema: los datos generalmente se almacenan en bytes y no se accede directamente a cada bit binario, por lo que debe contener el rango de elementos proporcionado por el usuario.

Ajuste de fila, el principio de ajuste es: expandir ambos extremos adecuadamente para que el número de serie del primer elemento y el número de elementos sean exactamente múltiplos de 8, de modo que la colección se pueda almacenar en bytes. Es decir, si arrtype=set of

Char1...Char2 (las constantes char1, Char2 deben estar predefinidas), el rango se extiende hasta NewChar1...NewChar2, donde newchar1=chr.

(ord(char 1)-ord(char 1)mod 8), nuevo char 2 = chr(ord(char 2)+7-ord(char 2)mod

8).

Para arrtype = un conjunto de

#'...'z ', el rango dado por el usuario es #35...#122, entonces el rango real de la extensión es #32... #127, el elemento El número es 96, por lo que se requiere una tabla de 96 bits = 12 bytes.

, por lo que cada elemento de la matriz A (elemento de la matriz) ocupa 12 bytes y ***10 elementos ocupan 120 bytes.

Pregunta: Para arrtype=set of '# '..z '

¿Cuál es el resultado después de ejecutar fillchar(a, sizeof(a), 135)? (135) 10 = (1000111) 2. Cada elemento de la matriz A, como por ejemplo a[1], ocupa 12 bytes, es decir:

1000011110000111100001111000011110000165438 +011000011110000111100001111 0000 11110000654 38+0111000011110000111,

***96 bits binarios, el bit más bajo es 1, lo que indica que el elemento del conjunto 1 (# 32, es decir, un espacio) en el rango extendido pertenece al conjunto a [1], el segundo bit es 1, indica que el segundo elemento (# 33, es decir, "!")) pertenece al conjunto a[1]

El tercer bit es 1, indica que el tercer elemento (#34 o "") pertenece al conjunto a[1], el cuarto bit es 0, lo que indica que el cuarto elemento (#35 o "#") no pertenece al conjunto a[1].

Analogía. Otros elementos de la matriz a[2], a[3],..., a[10] son ​​iguales que a[1].

[Ejemplo 3] Problema de llenado parcial de bytes. Todos los bytes se rellenan (porque se utiliza la función sizeof()).

Por ejemplo 1, si ejecuta fillchar(a, 1, 55), es decir, el primer byte de la variable A (el byte más bajo del elemento con el subíndice más pequeño) se llena con (55) 10. El principio es el mismo.

[Resumen] La función del proceso fill char (var X; count: word

value) es completar el recuento bajo ocupado por la variable especificada en cada byte de bytes, ya que varios Los tipos de datos tienen el mismo valor 2.

El código binario tiene diferentes interpretaciones, por lo que los resultados finales varían mucho. Este artículo explora los mecanismos de almacenamiento interno de varios tipos de datos para ayudarlo a profundizar su comprensión de los tipos de datos.