Çok büyük bir sayı ve aynı sayı -1 basmak için bekliyordum ama -1 ve -2 basar, neden bu?c neden bu bir negatif sayı yazdırıyor?
fprintf(stderr, "%d\n", 0xffffffff);
fprintf(stderr, "%d\n", 0xfffffffe);
Çok büyük bir sayı ve aynı sayı -1 basmak için bekliyordum ama -1 ve -2 basar, neden bu?c neden bu bir negatif sayı yazdırıyor?
fprintf(stderr, "%d\n", 0xffffffff);
fprintf(stderr, "%d\n", 0xfffffffe);
%d
biçimi imzalı tamsayı (ondalık) 'dir. Tamsayılar, two's complement kullanılarak saklanır, yani yüksek sıralı bit (8000 0000), bir konuşma biçiminde değerin belirtisini gösterir.
aşağı 3 ila Sayma, değerler şunlardır:
0000 0003 = 3
0000 0002 = 2
0000 0001 = 1
0000 0000 = 0
FFFF FFFF = -1
FFFF FFFE = -2
vb
Eğer FFFF FFFF %u
(imzasız) biçimini kullanın, büyük bir pozitif sayı olarak görüntülemek isterseniz
değerleri imzalı tamsayı ilk bit işaretidir two's complement
Look up ikinin tamamlayıcısı -1 temsili ve -2
vardır 0xEFFFFFFF.
"% d" argümanı, girişi imzalı bir tamsayı olarak basar. Sonuç olarak, two's complement representation'u keşfettiniz, bunun yerine "% u" değerini düşünün.
oh,% uzun için nedir? veya imzasız? – user105033
% u - sadece yanıta eklendi :) –
int% d, imzasız% u, long int% ld, long unsigned% lu –