Forum: D Programlama Dili RSS
| işlecinin sonuç aralığı nedir?
acehreli (Moderatör) #1
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4527 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Konu adı: | işlecinin sonuç aralığı nedir?
Andrei Alexandrescu, bit işlemleriyle ilgili oldukça zor bir soru soruyor:

  http://www.digitalmars.com/webnews/newsgroups.…?art_grou…

Henüz etkin bir çözümü bulunabilmiş değil.

Soru: a'nın ve b'nin değer aralıklarını biliyorsak, yani her ikisinin de en küçük ve en büyük değerlerini biliyorsak; ikisinin bit düzeyinde veya'lanmasının değer aralığı nedir?

c = a | b;

Yani c'nin alabileceği en küçük ve en büyük değerleri, diğer ikisinin en küçük ve en büyük değerlerinden bulabilir miyiz?

Ustaların zorlandıklarını görmek güzel... :)

Ali
canalpay (Moderatör) #2
Kullanıcı başlığı: Can Alpay Çiftçi
Üye Tem 2009 tarihinden beri · 1133 mesaj · Konum: İzmir
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Soruyu çok iyi anlamadım ama anladığım kadarıyla tahmin etmeye çalışayım:

C en büyük değeri bence a+b kadar olur.

Buna örnek Andrei zaten vermiş. 3 ve 4.

C'nin en küçük değeride max(a,b) olur. Yani A daha büyük ise A, B daha büyükse B.

Yani C=A|B'nin tanım aralığı  max(A,B)<=C<=A+B (<=: Küçük eşit, max(a,b) hangi sayı daha büyükse onun değeri.)
  
Sanırım bunun bilinememesinin sebebi 2lik sisteme dönüştürülmesi.


Acaba yukarıda söylediğim şey sorunun cevabı mı ?
acehreli (Moderatör) #3
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4527 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Orada Andrei ve diğer çözüm bulduklarını sananlar yanılıyorlar. :D Ne en küçük değer için verdikleri doğru, ne de en büyük değer için.

Galiba sorun şuradan kaynaklanıyor: | işleci aslında değerlerle değil, değerleri oluşturan parçalarla ilgili...

Bu soru, işaretli sayılarda bambaşka bir sorun! :) Onu gözardı edersek, şimdilik gördüğüm tek doğru çözüm şu:

  http://www.digitalmars.com/webnews/newsgroups.…?art_grou…

Ali
acehreli (Moderatör) #4
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4527 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Yanıtlanan mesaj #2
canalpay:
C en büyük değeri bence a+b kadar olur.

Buna örnek Andrei zaten vermiş. 3 ve 4.

O sayılarda doğru çıkması tesadüf. Zaten bir noktadan sonra soruyu Andrei de unuttu ve min_a ve min_b'nin 0 olduğunu varsaymaya başladı. :D

C'nin en küçük değeride max(a,b) olur. Yani A daha büyük ise A, B daha büyükse B.

Çok yanılmışlar ve kafaları karışmış. :) [min_a,max_a] aralığında bir sürü sayı, [min_b,max_b] aralığında da bir sürü sayı olabilir.

Bu sayıların bit desenleri ilginç şekillerde örtüşebilir ve o yanıt da yanlış olabilir.

Örneğin min_a ve max_a'nın ikisi de 4, ve min_b ve max_b'nin ikisi de 2. c için tek bir değer olabilir: 4|2 == 6. min_c ve max_c 6'dır.

Sanırım bunun bilinememesinin sebebi 2lik sisteme dönüştürülmesi.

İkilik sistem olduğu doğru tabii ama dönüştürme yok; çünkü bütün sayılar zaten ikili sistemde ve | işleci bitler üzerinde çalışıyor.

Ali
canalpay (Moderatör) #5
Kullanıcı başlığı: Can Alpay Çiftçi
Üye Tem 2009 tarihinden beri · 1133 mesaj · Konum: İzmir
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Ben soruyu yanlış anlamış olmalıyım. Ben soruyu şöyle düşündüm: c=a|b ise c'nin tanım aralığını söyleyeniz.

Yanıt: max(A,B)<=C<=A+B


4|2'de 6 ediyor ve benim verdiğim tanım aralığına uyuyor(max(4,2) yani 4 4+2=6 yani 6. bu değer kesinlikle 4=<C=<6 aralığında olmalı. Ve oluyor. Ama sizin sorduğunuz soru farklı. ). Ama sizin(ve Andrei'nin) sorduğu soru daha başka. O soruyuda anladığımda ona göre formülü değiştirim
acehreli (Moderatör) #6
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4527 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Birisi hızlı bir çözüm buldu:

  http://www.digitalmars.com/webnews/newsgroups.…?art_grou…

Benim katkım, daha önce önerdiği çözümlerin hatalarını göstermek oldu. ;)

Ali
Doğrulama Kodu: VeriCode Lütfen resimde gördüğünüz doğrulama kodunu girin:
İfadeler: :-) ;-) :-D :-p :blush: :cool: :rolleyes: :huh: :-/ <_< :-( :'( :#: :scared: 8-( :nuts: :-O
Özel Karakterler:
Bağlı değilsiniz. · Şifremi unuttum · ÜYELİK
This board is powered by the Unclassified NewsBoard software, 20100516-dev, © 2003-10 by Yves Goergen
Şu an: 2017-11-21, 19:39:48 (UTC -08:00)