Wie man eine gegebene Zahl mit 2 multipliziert, ohne arithmetische Operatoren in c-Sprache zu verwenden?Wie man eine gegebene Zahl mit 2 multipliziert, ohne arithmetische Operatoren in c zu verwenden?
Antwort
Verwendung bitweise < < Betreiber:
x = x << 1;
Diese für integer und lange Zahlen arbeitet (nicht Gleitkommazahlen).
Es verschiebt sich im Grunde die binären Inhalte um eine Position nach links, die von 2
Linksverschiebung der Multiplikation entspricht.
But why would you want to do that? Überlassen Sie diese Art der Optimierung dem Compiler.
Liste der Operatoren und viele Beispiele auf wikipedia.
mache mir viel klar? – sevugarajan
Laut dem Tag ist dies eine Hausaufgabe. –
Dieses Tag wurde nach meiner Antwort hinzugefügt, aber selbst für Hausaufgaben wäre es eine gute Idee, darauf hinzuweisen, dass dies nicht der richtige Weg ist, um Multiplikation in einer höheren Sprache zu machen. –
einfach auf kgiannakakis erweitern schreiben:
den Shift-Operator <<
funktioniert, weil es auf der binären Ebene verlagert - effektiv in der Basis 2. Wie eine Reihe von einem Ort nach links in dezimal bewegt (Basis 10) ist die gleiche wie von 10. beispiels~~POS=TRUNC weise~~POS=HEADCOMP multipliziert:
23 (move to left one digit) = 230 = 23 * 10
für das Beispiel (unter Verwendung des Präfix 0B Binärzahlen darstellen):
3 * 2 = 6
0b11 << 1 = 0b110
Shifting durch andere Zahlen äquivalent von 2 bis Multiplizieren ‚n‘ mal, oder durch 2 bis n-ten Potenz multipliziert (2^n)
3 * 8 = 3 * 2^3 = 24
0b11 * 8 = 0b11 << 3 = 0b11000 (note the trailing zeros)
und ein Beispiel in dezimalem es zu beenden:
23 (move to left 3 places) = 23 * 1000 = 23 * 10^3 = 23000
Vorsicht: Shifting möglicherweise nicht für signierte Variablen arbeiten,
int x;
int tmp;
if (x < 0) {
tmp = -x;
tmp = tmp << 1;
x = -tmp;
}
else {
x = x << 1;
}
Im Allgemeinen, wenn Sie mit signierten Variablen zu tun haben, möchten Sie genau wissen, was Sie gerade tun, und sollten in der Regel Bit-Manipulationen vermeiden. Wenn ich mit Schichten multiplizieren müsste, würde ich wahrscheinlich das Vorzeichen als ein separates Zeichen behalten und sicherstellen, dass es wieder eingefügt wird. Oder schreibe es in reiner Versammlung und missbrauche das Tragen-Zeichen. –
In der Regel -ve Zahlen werden gespeichert 2s Kompliment in diesem Fall Verschiebung sollte gut funktionieren und das Vorzeichen Bit beibehalten. Sie haben immer noch Probleme mit dem Überlauf, aber das ist auch bei der geraden Multiplikation der Fall. –
Nur um sicherzustellen, dass wir alle klar sind, dies zu tun, wie jeder hat vorgeschlagen, bitwis e Verschiebung nach links (< <)
Jedes Mal, wenn Sie nach links verschieben, multiplizieren Sie im Wesentlichen um einen Faktor von zwei.
int x;
int result;
x = 5;
// result = 10 (multiply by a factor of 2 or 2^1=2)
result = 5<<1;
//result = 20 (multiply by a factor of 4 or 2^2=4)
result = 5<<2;
//result = 40 (multiply by a factor of 8 or 2^3=8)
result = 5<<3;
- 1. Wie finden Sie ungerade/gerade Zahl ohne arithmetische Operatoren in C?
- 2. Eine gegebene Zahl ändern, um die erforderliche Summe zu finden?
- 3. Arithmetische Operatoren in PhP Echo
- 4. Overloading Arithmetische Operatoren
- 5. Eine Funktion zu finden, wenn eine gegebene Zahl ist prime
- 6. C# Wie man RowFilter in DataView multipliziert
- 7. Wie formatiert man eine Zahl als Prozentsatz ohne das Prozentzeichen?
- 8. Ermitteln, ob eine gegebene Zahl eine Primzahl in Haskell ist
- 9. Wie man Menge multipliziert und C aufzeichnet #
- 10. arithmetische Ausnahme in C#
- 11. Division einer Zahl ohne Division Operator in c
- 12. Was ist der "beste" Weg, arithmetische Operatoren in modernem C++ zu überladen?
- 13. Können Sie arithmetische Operatoren verwenden, um zwischen 0 und 1 zu wechseln?
- 14. Image Arithmetische Funktionen in C++
- 15. MySQL ganze Zahl vorzeichenlose arithmetische Probleme?
- 16. Operator Vorrang - Arithmetische und bedingte Operatoren
- 17. C++ Wie multipliziert man Vererbungen von Interfaces mit unterschiedlichen Rückgabetypen?
- 18. Wie man Matrizen in JavaScript multipliziert
- 19. Verwenden Sie Operatoren in Vorlagen in C++
- 20. wie man zwei Spalten in gridview multipliziert asp.net C#
- 21. Wie multipliziert man Funktionen in Python?
- 22. Wie man Tensoren in Theano multipliziert
- 23. Wie man alle Einträge in einer Excel-Spalte mit einer Zahl multipliziert
- 24. Wie man etwas in eine gegebene Klasse in Matlab einwickelt
- 25. Bit-Operatoren stoppen, nachdem man 2^31
- 26. Gibt es eine Möglichkeit, arithmetische und logische Operatoren als Methodenparameter in VBA zu übergeben?
- 27. Suchen Sie die kleinste Zahl, die größer als eine gegebene Zahl in einer sortierten Liste ist
- 28. C++ Zeichenfolge mit Wort und Zahl in Zahl umwandeln
- 29. Ternary Operatoren in C#
- 30. Wie man eine Zahl aufrundet
machen Sie mir klar? – sevugarajan
Lesen Sie über Binär in Ihrer eigenen Sprache. 2 ist "10" in binär und drei sind "11". Also binär geschrieben, 3 * 2 = 6 ist wie folgt geschrieben: 11 * 10 = 110, DAS GLEICH ALS LINKE UMSCHALTUNG IST. –
"und lange Zahlen" - was? Ist der lange Datentyp kein Integer? – strager