İmzalanan olanlar üzerinde işaretsiz değerler kullanılır?

oy
66

Ne zaman imzalı birinin üzerine işaretsiz değişken kullanılması uygun olan? Ne yaklaşık fordöngü?

Bu konuda görüşleri çok duyuyorum ve uzlaşma benzeyen bir şey olup olmadığını görmek istedim.

for (unsigned int i = 0; i < someThing.length(); i++) {  
    SomeThing var = someThing.at(i);  
    // You get the idea.  
}

Java imzasız değerlere sahip değildir biliyorum ve bu konuda bir bilinçli bir karar olmalı Sun Microsystems 'parçası.

Oluştur 02/08/2008 saat 04:34
kaynak kullanıcı
Diğer dillerde...                            


5 cevaplar

oy
61

Ben bulmak için memnun oldu iyi bir konuşma gerçekten çok önce düşünce vermişti değil gibi bu konuda.

Özetle, imzalı iyi bir genel seçimdir - Eğer (döngü durumu için tipik gibi) değişkeni üzerinde aritmetik yapmaya gidiyoruz - Eğer tüm sayılar pozitif öldüğünden emin olduğunuzda bile.

Eğer maskeleri gibi bitsel şeyler yapmaya gidiyoruz, imzasız başlar daha mantıklı. Veya, işaret biti yararlanarak bu ekstra pozitif aralık almak için umutsuz eğer.

Ben tutarlı kalmak ve (makale karşı uyardı gibi) iki tür karıştırma önlemek için kendime güvenemiyorum çünkü Şahsen ben imzalanmış gibi.

Cevap 02/08/2008 saat 04:49
kaynak kullanıcı

oy
8

Yukarıdaki örnekte, ne zaman 'i' her zaman pozitif olacak ve daha yüksek bir menzil yararlı olacağını imzasız, yararlı olacaktır. Aşağıdaki gibi 'beyan' ifadeleri, kullanıyorsanız gibi:

#declare BIT1 (unsigned int 1)
#declare BIT32 (unsigned int reallybignumber)

Özellikle bu değerler asla değişmeyecek zaman.

İnsanların paralarını sorumsuz ve kırmızı sürekli bir muhasebe programı yapıyorsanız Ancak, kesinlikle 'imzalı' kullanmak isteyecektir.

Genel bir kural hangi C aslında varsayılan, imzalı kullanmak olduğunu gerçi ben aziz katılıyorum, bu yüzden kapalı konum.

Cevap 02/08/2008 saat 05:31
kaynak kullanıcı

oy
7

Ben senin iş durumu negatif bir sayı geçersiz olduğunu belirler, sen düşünürdüm istiyorum gösterilen veya atılan bir hata var.

Bir ikili dosyasında bir proje veri işleme üzerinde çalışan ve bir veritabanına veri saklarken göz önüne aldığımızda, sadece son zamanlarda tamsayılar öğrendim. Ben ikili veri bilerek "yozlaştırıcı" idi ve negatif değerler yerine beklenen hata alıyorum sona erdi. Ben değer dönüştürülen rağmen, değer benim iş durum için geçerli olmadığını gördük.
Benim program hatası yoktu ve ben veritabanına yanlış veri alma sona erdi. Kullanmış olsaydı daha iyi olurdu uintve başarısız programı vardı.

Cevap 10/11/2008 saat 20:04
kaynak kullanıcı

oy
7

Eğer imzalı ve imzasız türleri karşılaştırın zaman C ve C ++ derleyicileri bir uyarı üretecektir; senin örneğin kodda, size döngü değişkeni imzasız yapmak ve uyarıları olmadan kod derleyici üretmek olamazdı (uyarılar açık olduğunu söyledi varsayarak).

Doğal olarak, uyarılarla topluyoruz sağ, yukarı tüm yol çevirdi?

Ve, bir adım daha ileri olduğunu onu almak "Uyarıları hata olarak tedavi" ile derleme düşündünüz var?

imzalı numaraları kullanarak ile olumsuz örneğin, değerler 0-> n menü seçimi böylece, onlara aşırı bir günaha olmasıdır ve -1 seçili hiçbir şey ifade - daha doğrusu iki değişken, bir tane olan bir ders oluşturmak yerine şey seçilirse gösterir ve başka bu seçimin ne olduğunu saklamak için. Siz farkına varmadan, sen her yerde negatif biri için test ediyoruz ve derleyici sahip olduğunuz menü seçim sayısına karşı menü seçimini karşılaştırmak isteyen konum hakkında şikayet - ama onlar farklı çünkü bu tehlikeli . Yani bunu yapmaz.

Cevap 04/08/2008 saat 14:35
kaynak kullanıcı

oy
6

size_tgenellikle bunun için iyi bir seçimdir, ya size_typebir STL sınıfını kullanıyorsanız.

Cevap 02/08/2008 saat 06:51
kaynak kullanıcı

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more