Folgen Sie dem Video unten, um zu sehen, wie Sie unsere Website als Icon auf Ihrem Homescreen erstellen.
Anmerkung: This feature may not be available in some browsers.
Ich kenne allerdings MSB und LSB als Abkürzung für most significant Bit bzw. least significant Bit. Ich wüsste auch nicht, warum es gerade auf ein Byte ankommen sollte. ;-)
das stammt noch aus Zeiten da ein Byte als normal galt
Immerhin mußte für jede Zahl > 255 dann ein MSB/LSB her und wurde mit Byte als "normaler" Grenze synonym gesetzt!
Zu diesen Zeiten ging es aber auch schon um Bits.
for( i = 0; i < 3; i++)
{
zwischenergebnis = zahl2 / 2;
zahlarray = zahl2 % 2;
}
if( ( ( zahl1 >> 3 & 0x01) && zahlarray) == 1)
{
MSB = MSB | (0x001 << 1);
}
#include <stdio.h>
int main( void)
{
//Variablendeklaration
unsigned int zahl1, zahl2; //Faktor 1, Faktor 2 zur Multiplikation
unsigned int zwischenergebnis; //zur Umwandlung von zahl2 in ein Bit-Array
unsigned int produkt; //Ergebnis zum Überprüfen
unsigned int MSB, LSB; //MSB und LSB, beide sollen 3 Bit groß sein
char zahlarray[3]; //zahl2 soll hier bitweise gespeichert werden
int i; //Schleifenzähler
MSB = 0;
LSB = 0;
//Eingabeaufforderung
printf( "Bitte geben Sie eine Zahl zwischen 0 und 7 ein: "); //Faktor 1, max 3 Bit groß
scanf( "%d", &zahl1);
printf( "Bitte geben Sie eine zweite Zahl zwischen 0 und 7 ein: "); //Faktor 2, max 3 Bit groß
scanf( "%d", &zahl2);
//Rechnung
produkt = zahl1 * zahl2; //Ergebnis zum überprüfen
zwischenergebnis = zahl2 / 2; //Abspeicherung von zahl2 in Bit-Array
zahlarray[0] = zahl2 % 2; //niederwertigstes Bit
for( i = 1; i < 3; i++)
{
zwischenergebnis = zwischenergebnis / 2;
zahlarray[i] = zwischenergebnis % 2;
}
LSB = zahl1;
for( i = 2; i > 0; i--) //Binäre Multiplikation
{
if( ( ( LSB >> 3 & 0x01) && zahlarray[i]) == 1) //Wenn das höchste Bit von LSB und das nächste Bit von zahl2 eine 1 ist
{
MSB = MSB | (0x001 << 1); //dann setze das niedrigste Bit von MSB
}
if( zahlarray[i] == 1) //Wenn die ite Stelle von zahl2 eine 1 ist
{
LSB = LSB + (zahl1 << 1); //dann shifte zahl1 nach links und addiere die Zahl zu LSB
}
if( zahlarray[i] == 0) //Wenn die ite Stelle von zahl2 eine 0 ist
{
LSB = LSB << 1; //dann shifte LSB um eine Stelle nach links
}
MSB = MSB << 1; //Shifte MSB nach links
}
//Ausgabe
printf( "\n\nProdukt: %d", produkt); //Ergebnis zum Überprüfen
printf( "\nLSB, MSB: %d, %d", LSB, MSB); //LSB, MSB
return 0;
}
#include <stdio.h>
unsigned long long zahl1 = 0x1234567890LL;
unsigned long long zahl2 = 0x987654321LL;
unsigned char ergebnis[80];
unsigned char operant[80];
void shiftLeft(){
int i;
for (i = 79; i >= 0; i--) operant[i] = operant[i - 1];
operant[0] = 0;
}
void add() {
unsigned char carry = 0;
int i;
for (i = 0; i < 80; i++) {
switch((operant[i]<<2) + (ergebnis[i]<<1) + carry) {
case 0: ergebnis[i] = 0; carry = 0; break;
case 1: ergebnis[i] = 1; carry = 0; break;
case 2: ergebnis[i] = 1; carry = 0; break;
case 3: ergebnis[i] = 0; carry = 1; break;
case 4: ergebnis[i] = 1; carry = 0; break;
case 5: ergebnis[i] = 0; carry = 1; break;
case 6: ergebnis[i] = 0; carry = 1; break;
case 7: ergebnis[i] = 1; carry = 1; break;
}
}
}
int main() {
/* Vorzeichen bestimmen */
unsigned char vz_zahl1 = zahl1 & 0x8000000000LL;
unsigned char vz_zahl2 = zahl2 & 0x8000000000LL;
/* Vorzeichen 'abschneiden' */
zahl1 &= 0x7FFFFFFFFFLL;
zahl2 &= 0x7FFFFFFFFFLL;
int i;
/* Operant laden */
for (i = 0; i < 40; i++) operant[i] = (zahl1 >> i) & 1;
/* Multiplizieren */
if((zahl2 & 1) == 1) add();
for (i = 1; i < 39; i++) {
shiftLeft();
if(((zahl2 >> i) & 1) == 1) add();
}
/* Vorzeichen wieder anfuegen */
ergebnis[79] = vz_zahl1 ^ vz_zahl1;
/* Ergebnis ausgeben */
printf("MSB: ");
for (i = 0; i < 40; i++) printf("%d", ergebnis[79 - i]);
printf("\n");
printf("LSB: ");
for (i = 0; i < 40; i++) printf("%d", ergebnis[39 - i]);
printf("\n");
return 0;
}