이것은 LeetCode 질문입니다. 그 질문의 다른 버전에서 나는 4 개의 답을 썼다. "비트 조작"을 사용하려고하면 오류가 발생합니다. LeetCode의 아무도 내 질문에 답할 수 없기 때문에 이에 대한 신속한 문서를 찾을 수 없습니다. 나는 여기서 물어볼려고 노력할 것이라고 생각했다.왜 Swift에서 비트 조작을 사용하여 음수를 얻을 수 없습니까?
질문은 주어진 배열에서 주 요소 (> n/2)를 얻는 것입니다. 다음 코드는 Java과 같은 다른 언어에서 작동하므로 Swift에서 일반적인 질문 일 수 있습니다. 입력이 [-2147483648] 경우
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
}
는 출력 2147483648이다하지만 자바에서 성공적 출력 오른쪽 음수 일 수있다.
심지어 32 비트 플랫폼, 지능이 -2,147,483,648과 2,147,483,647 사이의 값을 저장할 수 있으며, 많은 정수 범위에 대한 충분한 크기 :
신속한 의사는 말한다.
음, 입력 번호가 1보다 크면, 2,147,483,647이다. 놀이터에서 pow(2.0, 31.0)
을 실행하면 이 표시됩니다. 혼란스러워. 내 코드가 잘못되었거나 놓친 부분이 Swift Int?
을 사용하는 것이다. '1000 ... 00000 [32 zeroes]'입니다. 반면에 2,147,483,648은'011 .... 111 [31 ones]' –