Puntos de conocimiento introductorios del lenguaje C (parte de)

La mayor parte del siguiente contenido proviene de Brother Peng de BitTech . Lo reimprimí después de tomar notas, resumir y comprender.
Dado que el enlace original no se puede escribir, solo se puede escribir el original, por favor comprenda

  • No puedo obtener el catálogo por ahora, así que veámoslo en vivo.

Cadena
Una colección de elementos de carácter
también se considera una matriz, que se almacena en una matriz de caracteres La
cadena termina con '\ 0', pero no se incluye en la longitud de la cadena.

char arr1 [] = "1bc";
char arr2 [] = {'a', 'b', 'c'};
printf ("% s", arr1);
printf ("% s", arr2);

arr1 se imprimirá normalmente y obtendrá el abc esperado
arr2 se imprimirá de manera anormal y obtendrá abc, pero más adelante pueden aparecer caracteres confusos.
pero

arr3 {'a', 'b', c ',' \ 0 '}

Obtendrá el mismo efecto que arr1.
% s se imprime como una cadena, lo que se necesita es la dirección de la cadena a imprimir. Es diferente de la impresión% d,% c.
La cadena se agregará automáticamente a '\ 0'.

Personaje de escape

\ ddd ----- ddd significa 1-3 dígitos octales.
\ xdd ----- dd significa 1-2 dígitos hexadecimales.

Todos los caracteres, algunos del teclado, se almacenan en la computadora en formato binario y hay un código de conversión decimal único llamado código ASCII.

La función strlen ()
calcula la longitud de una cadena en bytes. Termina con \ 0.
Si hay un carácter de escape en la cadena, también se cuenta como un carácter, y la
palabra clave 1. sizeof () se
usa para calcular la longitud del tipo de operando, en bytes.

Operador de bits

& Bitwise y

Opere los bits binarios del número de operando.

int a=5;
int b=3;
a----0101
      &
b----0011
---->0001  

En el dígito binario, sólo si ambos son 1, puede ser 1.
Análogo a &&, dos verdadero es verdadero y falso es falso.
Siempre que haya ceros en los dos dígitos binarios, es 0. Marque todos los 1.

| O bit a bit

int a=5;
int b=3;
a----0101
      |1
b----0011
---->0111

En dígitos binarios, siempre que uno de ellos sea 1, el resultado es 1, y solo si todos son 0, podemos obtener 0.
De manera análoga a ||, hay verdadero para verdadero y todo falso para falso.

^ XOR bit a bit

int a=5;
int b=3;
a----0101
      &
b----0011
---->0110

En el bit binario, solo dos bits son iguales, es 0, si los dos bits son diferentes, es 1.
Siempre que el número en el bit sea el mismo, incluso si ambos son 1, el resultado es 0.

~ Negación bit a bit

int a=5;
a-----0101
~a----1010

Recupere todos los dígitos binarios del número,
0–> 1
1–> 0
también se puede usar en condiciones de juicio como

while(~scanf("%d",&a))
{
    
    }

En la computadora, si la entrada es incorrecta, no se cumplen los requisitos. Devuelve un EOF, es decir, el valor devuelto es -1.

-1
原码:10000000 00000000 00000000 00000001
反码:11111111 11111111 11111111 11111110
补码:11111111 11111111 11111111 11111111

Luego invierta todos los bits del código de complemento, incluido el bit de signo

取反后补码:00000000 00000000 00000000 0000000

El bit de signo es 0, lo que significa que es un número positivo y la negación original es la misma para un número positivo. Devuelve un 0.

while (0) condición es falsa, el ciclo sale
y
el while (Scanf ("% D", & A)! = the EOF)
{}
puede tener el mismo efecto.

Operador de turno

 >><<
>位移位运算符

<< Desplazamiento a la izquierda
- >> Desplazamiento a la derecha
Estos dos operadores son formas binarias que actúan sobre un número.

unsigned int a=4;
int b=-4;
printf("%d",a<<2);
printf("%d",b<<2);

Todos sabemos que para los números positivos y negativos, todas las operaciones en la memoria se realizan en forma de complemento. El complemento de un número positivo es su código original. Negativo

Código original -> Código inverso -> Código complemento

a
原码:00000000 00000000 00000000 00000100
反码:00000000 00000000 00000000 00000100
补码:00000000 00000000 00000000 00000100
b
原码:10000000 00000000 00000000 00000100
反码:11111111 11111111 11111111 11111011
补码:11111111 11111111 11111111 11111100

Luego
mueva el desplazamiento a hacia la izquierda y agregue cero a la derecha.

a<<2
00000000 00000000 00000000 00010000

El resultado es 4 * (2 ^ 2) = 16

b>>2
补码:11111111 11111111 11111111 11111111
反码:11111111 11111111 11111111 11111110
原码:10000000 00000000 00000000 00000001

El código de complemento se desplaza hacia la derecha. Debido a que es un número negativo, el bit más alto se complementa con 1, y después de restar 1, se convierte de nuevo al código inverso, y luego se invierte el bit, pero el bit más alto permanece sin cambios en 1.
El resultado es (-4) / (2 ^ 2) = - 1

En este sentido, el operador de turno, << desplazar a la izquierda, multiplica el número (2 ^ el número de turnos).
- >> Desplazar a la derecha, número / (2 ^ número de desplazamiento).

Operador unario

! Inverso lógico

int a=!3;
int b=!0;

El resultado es

a = 0;
b = 1;

! (Lógico negativo) puede cambiar verdadero (distinto de cero) a falso (0) y puede cambiar falso a verdadero (1).

a ++
++ a
a–
–a

Símbolo en frente

-A
++ un
primer aumento, disminución y luego uso

Símbolo detrás

a–
a ++ se
usa primero, luego aumenta y disminuye

int a=5;
int b=a++
int c=5;
int d=++c

El resultado es

a = 6
b = 5
c = 6
d = 6

Operador ternario

?
¿Analizando condiciones? Resultado 1: Resultado 2
Si la condición de juicio es verdadera, el valor devuelto es el resultado 1, y si es falso, el valor devuelto es el resultado 2

a>b?10:5

Si a> b, devuelve 10, si a <= b, devuelve 5.

Operador de coma

int a=(2,3,4,5,6);

a == 6, en el operador de coma, a solo será el valor de la última expresión.

El contenido proviene de Bitpeng de Xi'an Honor Bit Technology .
El blog es para profundizar en mi memoria y comprensión.
Dado que el enlace original no se puede escribir, solo se puede escribir el original, por favor comprenda

Supongo que te gusta

Origin blog.csdn.net/weixin_52199109/article/details/112546228
Recomendado
Clasificación