nie mogę wydawać się pozbyć tego ostrzeżenia dla następującej linii kodu:Jak wyciszyć C CS0675 # ostrzegawczy: bitowym lub operator używany na argumencie znak rozszerzona
d.word[wrdIndex++] = d.GetWord(english) | (ulong)i;
ostrzeżenie dotyczy kod po operatorze przypisania. metoda GetWord zwraca wartość ulong. Próbowałem następujące bezskutecznie:
d.word[wrdIndex++] = (d.GetWord(english) | (ulong)i);
d.word[wrdIndex++] = d.GetWord(english) | ((ulong)i);
d.word[wrdIndex++] = ((ulong)d.GetWord(english)) | ((ulong)i);
Ktoś ma jakieś pomysły?
Kod z pewnością robi to, co powinien (i jest to właściwy sposób robienia tego, co chcę w tym przypadku, myślę) - Jestem tylko zaskoczony, że druga z 3 prób: d.GetWord (angielski) | ((ulong) i) nadal dostarcza ostrzeżenie, ponieważ ((ulong) i) jest rzutowane na ulong zanim bitowy operator OR zostanie zastosowany, prawda? –
Ah, teraz rozumiem - to naprawdę całkiem sprytny kompilator, aby ostrzec mnie o tym, jak sądzę. Czy istnieje sposób na odlanie do ulong bez rozszerzenia znaku (inne niż poprzez ręczne maskowanie wierzchołka)? –
Przesyłaj najpierw do uint. '(ulong) (uint) i' – CodesInChaos