İf-else veya başka herhangi bir karşılaştırma operatörü kullanmadan iki sayının maksimum bul
İki sayının maksimum bulabilirsiniz. İf-else veya başka herhangi bir karşılaştırma operatörü kullanmamalısınız. StackOverflow sormam gerektiğini düşündüm çevrimiçi ilan panosu bu soru buldum
ÖRNEK Giriş: 5, 10 10 . çıkış:
Biri bana bu kod satırları anlamanıza yardımcı olabilir bu çözümü buldum
int getMax(int a, int b) {
int c = a - b;
int k = (c >> 31) & 0x1;
int max = a - k * c;
return max;
}
CEVAP
int getMax(int a, int b) {
int c = a - b;
int k = (c >> 31) & 0x1;
int max = a - k * c;
return max;
}
Hadi bu teşrih. Bu ilk satır basittir - a
b
farkı saklar. Bu değer, negatif a < b
eğer negatif olmayan ve aksi.
Sonraki satırda:
int k = (c >> 31) & 0x1;
fikri c
değerinin negatif olup olmadığını kontrol edin. Hemen hemen tüm modern bilgisayarların içinde, bir sayı biçimi olarak adlandırılan saklanıriki tamamlayıcıhangi sayı en yüksek bit eğer sayı pozitif ise 0 ve 1 ise sayı negatif. Ayrıca, en in 32 bit. (c >> 31)
31 bit numarasını, en düşük bit için nokta sayısı en yüksek bit bırakarak geçer. Bu sayıyı alıp 1 ile Kullanılır Bir sonraki adım her yerde son bit 0 hariç olan () tüm yüksek bit siler ve sadece en düşük bit verir. c >> 31
en düşük bit olduğundan ya da 1 0 c
en yüksek bit okur bu c
, en yüksek bit. En yüksek bit olduğundan c
1, c
olumsuz (1) ya da pozitif olup olmadığını kontrol etmenin bir yoludur (0) 1 ıff. Yukarıdaki k
ile bu mantık birleştirerek a < b
eğer 1 ve 0.
Son adım bunu yapmak için:
int max = a - k * c;
a < b
k == 1
k * c = c = a - b
, ve bu kadar
a - k * c = a - (a - b) = a - a b = b
Doğru max, a < b
beri. a >= b
k == 0
Eğer yoksa, ve
a - k * c = a - 0 = a
Ayrıca doğru max.
Neden Python karşılaştırma dizeleri ku...
UL/Lİ ayarı kurşun renkler veya resiml...
Dize birleştirme: () herhangi bir para...
Nasıl herhangi bir URL veya web sayfas...
SQL Server: DAVA ne ZAMAN YA da O zama...