Cómo resolver este problema cuando tengo dos matrices declaradas como caracteres sin signo pero contienen valores enteros y tengo que realizar una resta por elementos pero no puedo tomar matrices enteras intermedias

Si usa C (o, de hecho, C ++ o Java), puede realizar la sustracción de dos unsigned chars . Esto se debe a que el compilador trata un char como un int , excepto que un char está diseñado semánticamente para almacenar el valor numérico correspondiente a un carácter en una codificación de caracteres como ASCII. Todas las operaciones aritméticas posibles en int s son posibles en char s. Por supuesto, el char sería promovido a int antes de que se realice la operación.

De hecho, si necesita almacenar un valor entero de 8 bits sin signo (byte), podría ser mejor usar un tipo como unsigned short short int (que no cumple con los estándares) o (preferiblemente) el tipo uint8_t definido en stdint.h (introducido en C99), solo para indicar mejor la semántica (lo más probable es que uint8_t sea un carácter unsigned char typedef’d).

El resultado de la resta debe almacenarse como un int , ya que puede ser negativo. Tú podrías use un signed char , aunque eso solo podría almacenar valores en el rango de -128 a 127 , y no podría almacenar el resultado correcto con algo como 255 - 2 o 1 - 200 .

Un entero de 16 bits con signo sería ideal para el resultado. Puede usar un short int o el tipo int16_t definido en stdint.h , que se recomienda sobre el primero.

Entonces, para su problema, necesitaría una matriz entera de la misma cardinalidad que las matrices originales para almacenar los resultados. Además, como ya se mencionó, los valores de caracteres unsigned char se promocionarían automáticamente a int al realizar la resta. Esto se debe a la promoción automática de tipos (consulte Conversión de tipos) definida en los estándares de idioma en sí mismos, sobre los que realmente no puede hacer nada.

#include
#include

int main (nulo)
{
carácter sin signo A [100], B [100];
int16_t diff [100]; / * o short int, si stdint.h no está disponible * /
…… ..
para (i = 0; i <N; i ++) {
diff [i] = A [i] – B [i];
}
…… ..
devuelve 0;
}

More Interesting

En entrevistas tecnológicas, ¿cómo podemos escribir un código que sea limpio, conciso, optimizado en tiempo y espacio y que cubra todos los casos básicos y de borde de una vez?

¿Cuáles son sus experiencias de entrevista con empresas tecnológicas en Bangalore?

¿Diseñar una arquitectura de servidor para servir imágenes de mapas de Google?

¿Por qué las empresas tecnológicas hacen preguntas sobre algoritmos difíciles en la entrevista técnica?

¿Por qué no se debe adquirir un mutex en una rutina de servicio de interrupción?

¿Cuál es la mejor manera de prepararse para una entrevista de PM PM en una empresa de tecnología?

Cómo imprimir todas las subsecuencias comunes más largas de dos cadenas

¿Cómo se estructura una típica entrevista SDE2 en Amazon India o Microsoft India para un candidato experimentado de 9 años?

¿Cuál es el algoritmo más rápido para encontrar todas las permutaciones posibles de una cadena?

¿Qué tan común es que se le pida que implemente la correspondencia de expresiones regulares en la entrevista?

¿Cómo puede determinar eficientemente el k-ésimo elemento máximo en una matriz ordenada MxN?

Si soy ecológico en TopCoder, ¿puedo pasar entrevistas a las principales empresas tecnológicas? ¿La mayoría de las personas que aprueban las entrevistas tienen la capacidad de salir bien en las competencias de TopCoder? Si me fuera mejor en los concursos de TopCoder, ¿se transferirían las habilidades a las entrevistas?

Escriba un programa que divida una cadena de palabras sin espacios en una cadena con espacios apropiados, por ejemplo: i / p peanutbutter o / p peanut butter?

Como estudiante en un campamento de programación de 12 semanas en SF, ¿cuál es la mejor manera de prepararse para futuras entrevistas técnicas?

¿Cómo se prepara para una entrevista de desarrollador de software en solo 3 días?