2017-11-05 15 views
2

이것은 내가 잘못하지만 어떻게 든 longTime64Bits (3 호선) 새 값은 항상 0으로 오는 것을 확실하지 않다

long longTime64Bits = 1509412598194L; 
int intTime32Bits = 63673; 

longTime64Bits &= ~0xFFFFFFFF; // this should set last 32 bits to zero 

long new64bitTime = longTime64Bits |= intTime32Bits; // new number with replaced 32 bits 

마련되는 것입니다 .

+0

여기서 'intTime32Bits'에 값을 할당 하시겠습니까? –

답변

4

이렇게하면 잘못된 결과가 나오는 이유는 0xFFFFFFFF입니다. int 상수입니다. 따라서 ~0xFFFFFFFFint이며 0과 같습니다.

0xFFFFFFFF00000000L으로 상수를 변경하거나 ~0xFFFFFFFFL을 사용하면 문제가 해결됩니다.

+1

'~ 0xFFFFFFFFL'도 작동합니다. 또는 0xFFFFFFFFL도됩니다. "3200 – Bohemian

+0

@ 보헤미안 오른쪽, 나는 이것을 테스트하고 답변을 닌자가 편집했습니다. – dasblinkenlight

+0

'1L << 63 >> 31'은 어떻습니까? 그것은 논란의 여지가 너무 읽을 수있어 :) – Bohemian