¿Qué hace esta pieza de código y qué significa cada uno de los símbolos utilizados? El lenguaje utilizado es C y soy solo un principiante en la encoding.

Encontré un código del cual no podía entender lo que están haciendo estas dos líneas. Ni siquiera se puede obtener la syntax. Especifique qué tipo de funcionalidades se han utilizado como, por ejemplo, supongo que ha habido un uso de operadores condicionales en la primera línea.

unsigned long long base_size = b >= 2 ? (b-2)/2:0; printf("%llu\n",(base_size*(base_size+1))/2); 

Lo que se usa aquí es el operador condicional (también llamado operador ternario porque usa 3 expresiones) El formato del operador condicional es

 expression1 ? expression2 : expression3. 

Ahora déjame explicarte esto.

Si expression1 evalúa como verdadero, entonces el valor de la expresión completa es el valor de expression2 ; de lo contrario, el valor de la expresión completa es expression3 .

Ahora toma este sencillo ejemplo

 result = marks >= 50 ? 'P' : 'F' ; 

result tendrá el valor 'P' si las marks >= 50 expresión marks >= 50 evalúan como verdaderas, de lo contrario, el result obtendrá 'F' .

Ahora pasemos a su caso

 unsigned long long base_size = b >= 2 ? (b-2)/2:0; printf("%llu\n",(base_size*(base_size+1))/2); 

Verifica si b >= 2 , si es así, luego asigna el valor de base_size (b-2)/2 contrario, asigna el valor de base_size .

También es el equivalente de

 if( b >= 2 ) base_size = ( b - 2 ) / 2; else base_size = 0; 

Ahora, por si no lo sabes

 printf("%llu\n",(base_size*(base_size+1))/2); 

Lo que esto hace es base_size * ( base_size + 1 ) / 2 el valor de base_size * ( base_size + 1 ) / 2 en la pantalla de salida.

Según la prioridad del operador es c, la primera línea es efectivamente

 unsigned long long base_size = ( b >= 2 ? (b-2)/2:0 ); 

Ahora, la expresión inside ( ) usa un operador ternario o un operador condicional.

Según el estándar C11 , capítulo 6.5.15, la syntax es

 conditional-expression: logical-OR-expression logical-OR-expression ? expression : conditional-expression 

y la semántica es [sigue mi énfasis]

Se evalúa el primer operando; hay un punto de secuencia entre su evaluación y la evaluación del segundo o tercer operando (el que se evalúe). El segundo operando se evalúa solo si el primero se compara con 0; el tercer operando se evalúa solo si el primero se compara igual a 0; el resultado es el valor del segundo o tercer operando (el que se evalúe) convertido al tipo descrito a continuación en la NOTA .

NOTA: Una expresión condicional no produce un valor l.

Así que, siguiendo eso, tu caso,

 b >= 2 ? (b-2)/2:0 

Primero, se evalúa la primera expresión, b >= 2 . si b tiene un valor mayor o igual a 2 , devuelve 1 , de lo contrario, 0 .

  • si se evalúa a 1 , se ejecuta el segundo operando, (b-2)/2 y el resultado final del operador condicional es el valor de la expresión.

  • de manera similar, se evalúa a 0 , el tercer operando 0 se devuelve como resultado del operador condicional.

Finalmente, el valor de retorno del operador ternario se usa para inicializar la variable unsigned long long base_size .

Acerca de la segunda línea, printf() es una función de biblioteca de C estándar, prototipo en stdio.h . Puedes encontrar más sobre esto aquí .

Esto se llama el operador ternario

 x = condition ? value : another_value; 

medio

 if (condition) x = value; else x = another_value; 

es evidente que value y another_value deben tener el mismo tipo que x y esa condition debe ser una expresión que pueda evaluar un valor de verdad.

Aunque el código que publicaste no se ve bien porque es difícil de leer, sería mucho mejor así

 unsigned long long base_size; base_size = (b >= 2) ? (b - 2) / 2 : 0; printf("%llu\n", (base_size * (base_size + 1)) / 2); 

y esto sería equivalente a

 if (b >= 2) printf("%llu\n", (((b - 2) / 2) * (((b - 2) / 2) + 1)) / 2); else printf("0\n");