Au niveau du bit de concaténation dans C
Je suis en train de concaténer deux nombres binaires dans C. Donc, si j'ai 1010
et 0011
je veux mon résultat à 10100011
. J'ai écrit une routine que j'ai pensé faire le travail:
#include <stdio.h>
int main(void) {
int first = 1010;
int second = 0011;
int result = (first << 4) | second;
printf("%d", result);
return 0;
}
Je comprends que le numéro imprimé de cours va être en décimal, mais j'ai pensé que d'après mes opérations bit à bit, je serais d'obtenir l'équivalent décimal de 10100011
, ou 163. Cependant, mon résultat est imprimé en tant que 16169. Donc je suppose que ma question est...qu'une partie de cela je ne suis pas à comprendre ici? Est-ce juste une mauvaise compréhension de la façon dont printf est au travail, ou sont mes opérations bit à bit incorrect? Est-ce un problème pour essayer de le faire avec int
s?
1010
est la représentation décimale d'un nombre binaire1111110010
. Et0011
est en fait une base de 8 sens littéral décimal 9.- et ce qui vous a fait penser que le
int
représentation binaire au lieu de la virgule? - 16169 arrive, à cause de ce type de données int est de 4 octets de long, pas de 1 octet.\
Vous devez vous connecter pour publier un commentaire.
Vous avez oublié le préfixe
0b
, donc cela devrait fonctionner pour vous:De sortie:
Dans votre exemple le binaire de nombres ne sont pas des nombres binaires. La première est normal d'un nombre décimal (
1010
) et le second est un nombre octal, en raison du préfixe0
donc en décimal le deuxième nombre est:9
Ce qui est arrivé:
Premier nombre:
Deuxième nombre (->décimal->binaire):
Et votre calcul:
Si vous ne voulez pas être dépendante de la nouvelle norme, vous pouvez apprendre une règle simple surextension système binaire en hexadécimal
HTML:
De sorte que vous programme peut être réécrit comme suit:
HTML: