LeGoLaS
Onursal Üye
- Üyelik Tarihi
- 1 Ağu 2008
- Konular
- 4,885
- Mesajlar
- 16,461
- MFC Puanı
- 15,790
İki tam sayıyı birleştirmek
Python'da iki tam sayıyı, tam sayı olan bir değişkene birleştirerek atmak istiyorum. Bunu, sayıları, karakter dizisi olarak alıp/oluşturup birleştirebiliriz fakat ben bunu bitwise işleçleriyle yapmak istiyorum. Şu an kodu yazamıcam fakat benim bir çözümüm var. Birinci sayıyı "<<" ile 2 kere sola kaydırıp, kaydırılmış haline birinci sayının ilk halini veya işleciyle ekliyoruz (topluyoruz yani). Bir kere daha sola ekliyoruz ve ikinci sayıyı ekliyoruz.
s1 = int(input("1. Sayıyı gir:"))
s2 = int(input("2. Sayıyı gir:"))
sdegis = s1 << 2
sdegis ^= s1
sdegis <<= 1
sdegis ^= s2 # buradan emin degilim
print("Sayıların birleşmiş hali: "+sdegis)
Son satırda ya ikilik tabanda "1" eklicez ya da 2. Sayıyı ekliyoruz.
Bu yöntemle bazı sayıları yapabiliyorum ama çoğu sayı olmuyor. Mesela " 33 66 101"
Bunu sadece bitwise işleçleriyle yapmak için kısa ve net yöntem var mı ?
Birleştirebilirsin ama tekrar ayırmak için sayıların kaç bit alan kapladığını bilmen gerekir. Eğer ucu ucuna birleştireceksen birleştirirken de kaç bit olduklarını bilmelisin yoksa üzerine yazılıp bozulur. Bit işlemleri C gibi düşük seviyeli dillerde bolca yapılıyor ama orada sayılar sabit bit uzunluğuna sahip. Pythonda ise sayılar sınırsız büyüklükte olabilir.
Yukarıdaki örnekten yola çıkarsak eğer "s2" nin maksimum 32 bit uzunlukta olacağını garanti ediyorsan şu şekilde yapılabilir.
s1 = int(input("1. Sayıyı gir:"))
s2 = int(input("2. Sayıyı gir:"))
sdegis = (s1 << 32) | s2
...
s2'yi çıkartmak için
x = sdegis & (2**32 - 1)
Python'da iki tam sayıyı, tam sayı olan bir değişkene birleştirerek atmak istiyorum. Bunu, sayıları, karakter dizisi olarak alıp/oluşturup birleştirebiliriz fakat ben bunu bitwise işleçleriyle yapmak istiyorum. Şu an kodu yazamıcam fakat benim bir çözümüm var. Birinci sayıyı "<<" ile 2 kere sola kaydırıp, kaydırılmış haline birinci sayının ilk halini veya işleciyle ekliyoruz (topluyoruz yani). Bir kere daha sola ekliyoruz ve ikinci sayıyı ekliyoruz.
s1 = int(input("1. Sayıyı gir:"))
s2 = int(input("2. Sayıyı gir:"))
sdegis = s1 << 2
sdegis ^= s1
sdegis <<= 1
sdegis ^= s2 # buradan emin degilim
print("Sayıların birleşmiş hali: "+sdegis)
Son satırda ya ikilik tabanda "1" eklicez ya da 2. Sayıyı ekliyoruz.
Bu yöntemle bazı sayıları yapabiliyorum ama çoğu sayı olmuyor. Mesela " 33 66 101"
Bunu sadece bitwise işleçleriyle yapmak için kısa ve net yöntem var mı ?
Birleştirebilirsin ama tekrar ayırmak için sayıların kaç bit alan kapladığını bilmen gerekir. Eğer ucu ucuna birleştireceksen birleştirirken de kaç bit olduklarını bilmelisin yoksa üzerine yazılıp bozulur. Bit işlemleri C gibi düşük seviyeli dillerde bolca yapılıyor ama orada sayılar sabit bit uzunluğuna sahip. Pythonda ise sayılar sınırsız büyüklükte olabilir.
Yukarıdaki örnekten yola çıkarsak eğer "s2" nin maksimum 32 bit uzunlukta olacağını garanti ediyorsan şu şekilde yapılabilir.
s1 = int(input("1. Sayıyı gir:"))
s2 = int(input("2. Sayıyı gir:"))
sdegis = (s1 << 32) | s2
...
s2'yi çıkartmak için
x = sdegis & (2**32 - 1)