[Çözüldü] İki tam sayıyı birleştirmek

Başlatan Cengizhan7, 08 Mart 2019 - 19:27:25

« önceki - sonraki »

0 Üyeler ve 2 Ziyaretçi konuyu incelemekte.

Cengizhan7

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ı ?

Düzenleme: Python için yapılabilecek bir yöntem buldum ve onu da ekliyorum şuraya. Merak edenler faydalanabilir. Tabii bitwise işleciyle yapamadım, orası ayrı mesele. Sanırım Python ile ilgili bir uyumsuzluk var ki olmuyor.


import math

def f(x, y):
''' iki sayiyi birlestiren method.'''
a = math.floor(math.log10(y)) # 2. basamagin buyuklugune gore orani aliniyor.
return int(x * 10 ** (1+a) + y) # Birlestirme islemi yapiliyor.

sayi1 = int(input("1. sayiyi girin: "))
sayi2 = int(input("2. sayiyi girin: "))
print(f(sayi1, sayi2))

Empat

Python konusunda pek bilgim yok, dolayısıyla yardımcı olamayacağım. Fakat size sorununuzu çözecek bir yol gösterebilirim.

Facebook'ta İngilizce ve Türkçe içerikli Python grupları var. Bu gruplarda birçok aktif ve yardımsever üye var.

Sorununuzu orada dile getirirseniz kesinlikle yardımcı olacaklardır. İngilizceniz varsa İngilizce Python gruplarından yardım alma olasılığınız çok daha büyük.

Tabii Türkçe gruplardan da yardım alabilirsiniz. Gruplara girerken soruları cevaplarsanız, gruba dahil olmanıza izin vereceklerdir.
Everything for me is just Peace - Love - Coding. Also, as they say: I am a programmer, I have no life!

Amenofis

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)

Cengizhan7

#3
Alıntı yapılan: Empat - 09 Mart 2019 - 09:56:44
Sorununuzu orada dile getirirseniz kesinlikle yardımcı olacaklardır. İngilizceniz varsa İngilizce Python gruplarından yardım alma olasılığınız çok daha büyük.

Anladım, facebook hesabım yok sadece birkaç foruma bakıyorum ben ama pek aktif forum bulamıyorum. Facebook'a bir bakayım en iyisi, teşekkürler.

Alıntı yapılan: Amenofis - 09 Mart 2019 - 17:18:04
Yukarıdaki örnekten yola çıkarsak eğer "s2" nin maksimum 32 bit uzunlukta olacağını garanti ediyorsan şu şekilde yapılabilir.

21474836482 gibi büyük sayılar çıkıyor acaba dediğiniz gibi sınırsız büyüklükte olduğundan mı ?

Amenofis

https://muratavcibay.wordpress.com/bilgisayar-muhendisligi-dersleri/programlama-dilleri-ii/bitwise-islemleri/

Yukarıdaki gibi kaynaklardan bit işlemleri hakkında genel bilgi sahibi olmanı tavsiye ederim. Dile takılma. Bunlar bilgisayar mimarisi konularıdır. Bütün diller için geçerlidir.

Sayıyı 1 kez sola ötelemek 2 ile çarpmak demektir. Sola öteledikçe büyür, sağa öteledikçe küçülür.