Dies ist eine LeetCode-Frage. Ich habe 4 Antworten in verschiedenen Versionen dieser Frage geschrieben. Als ich versuchte "Bitmanipulation" zu benutzen, bekam ich den Fehler. Da niemand in LeetCode meine Frage beantworten kann, kann ich keinen Swift-Dokument darüber finden. Ich dachte, ich würde versuchen, hier zu fragen.Warum kann ich in Swift keine negative Nummer mit Bit-Manipulation erhalten?
Die Frage ist, das Mehrheitselement (> n/2) in einem gegebenen Array zu erhalten. Der folgende Code funktioniert in anderen Sprachen wie Java, also ich denke, es könnte eine allgemeine Frage in Swift sein.
func majorityElement(nums: [Int]) -> Int {
var bit = Array(count: 32, repeatedValue: 0)
for num in nums {
for i in 0..<32 {
if (num>>(31-i) & 1) == 1 {
bit[i] += 1
}
}
}
var ret = 0
for i in 0..<32 {
bit[i] = bit[i]>nums.count/2 ? 1 : 0
ret += bit[i] * (1<<(31-i))
}
return ret
}
Wenn der Eingang [-2147483648] ist, ist der Ausgang 2147483648. Aber in Java, kann es erfolgreich Ausgang der richtige negative Zahl.
Swift doc sagt:
Selbst auf einem 32-Bit-Plattformen, Int beliebigen Wert zwischen -2147483648 speichern und 2147483647, und ist groß genug für viele Integer-Bereiche.
Nun, es ist , der Eingang 1 größer ist als diese Zahl. Als ich pow(2.0, 31.0)
in Spielplatz lief, zeigt es . Ich bin verwirrt. Was ist falsch mit meinem Code oder was habe ich vermisst? Swift Int?
weil 2147483648 ist eigentlich eine 33-Bit-Zahl zu verwenden wäre. es ist '1000 ... 00000 [32 Nullen]', während 2,147,483,648 ist '011 .... 111 [31 Einsen] ' –