C#

2010-04-09 9 views
18

1 bit Ters çevirmek istiyorum bir byte (her zaman en düşük sıra konumunda) var. Ben 00000000 almak istiyorum 00000001 verilmiş yani ve 00000000 ile ben bunu böyle çözdü 00000001C#

istiyorum:

bit > 0 ? 0 : 1; 

Ben yapılabilir başka nasıl görmek merak ediyorum.

cevap

39

ne dersiniz:

bit ^= 1; 

onu değiştirir 1'den Bu sadece XOR ilk birşeylerdi.

Eğer (bir bayt için) soldaki 7 doğru sağda 0'dan sayma, biraz #n çevirmek isterseniz, bu ifadeyi kullanabilirsiniz:

bit ^= (1 << N); 

Bu başka rahatsız olmaz bitleri, ancak değer sadece hiç ondalık değer 0 veya 1 olacak (yani tüm diğer bitleri 0 olarak kalır.), ardından aşağıdaki yanı kullanılabilir:

bit = 1 - bit; 

Yine, sadece varsa bir bit seti olacak şekilde, 1 için aynı değeri ilk çevirme bitinde kullanabilirsiniz: #N:

bit = (1 << N) - bit; 

Elbette, bu noktada aslında aynı anlamda bit manipülasyonu yapmıyorsunuz.

Sahip olduğunuz ifade de iyi, ancak yine de tüm değeri değiştirecek. Bir bool değer olarak tek bir bit dile olsaydı

Ayrıca, bu yapabilirdi: değerini değiştirir

bit = !bit; 

. şaka ait


Daha: Elbette , "enterprisey" yolu bir arama tablosu kullanmak olacaktır:

byte[] bitTranslations = new byte[256]; 
bitTranslations[0] = 1; 
bitTranslations[1] = 0; 

bit = bitTranslations[bit]; 
+0

bu ilk bit gerektirmeyen bir avantaja sahiptir, hem de ilk seçilecek:

Bu ne istediğiniz değil. –

+0

İlk olarak kullanmak istedim! ama sonra sadece booller için keşfetti. Bu seviyede çalışan eğlenceli şeyler. –

+0

'Bir bool olarak ifade et' argümanı ikincisine bakıyorum - ne yaptığınıza bağlı olarak, kodun bir sonraki kişi için okunmasını biraz daha kolaylaştırabilir. – Paddy

4

Çözümün doğru değil, çünkü eğer biraz == 2 (10) sonra ödeviniz bit == 0 (00) verecektir.

bit ^= 1; 
+0

Haklısın, ama ben biraz daha düşük sıraya kaydırdım, bu benim için sorun değil bu yüzden –

+0

Benim yapmaya çalıştığın tek şey test/manipülasyon bir şey bu kayma kurtulmak olabilir operasyon ve sadece farklı bir sabit ile yerinde xor (örneğin eğer 7. en önemli bit ise bit^= 0x40; – par