SORU
13 HAZİRAN 2014, Cuma


Nasıl başlatır -1 tarafından dizisi memset?

manpage memset hakkında şunları söylüyor:

#include <string.h>
void *memset(void *s, int c, size_t n)

memset() işlevi ilk n doldururbaytbellek alanı ile sabit s ile işaret byte c.

memset aşağıda gösterildiği gibi int diziyi başlatmak için kullanılabilir mi açıktır:

int a[10];
memset(a, 1, sizeof(a));  

int 4 bayt (say) tarafından temsil edilir ve bir dizi tamsayılar a istediğiniz değeri elde edemez çünkü.
Ama ben sık sık programcılar memset ya 0 -1 int dizi öğelerini ayarlamak için kullanın.

int a[10];
int b[10];
memset(a, 0, sizeof(a));  
memset(b, -1, sizeof(b));  

Benim anlayışıma göre, tamsayı 0 ile başlatılıyor 0 1 byte (bu bağlamda yanlışım olabilir) temsil edilebilir, çünkü TAMAM. Ama nasıl -1 (4 bayt değeri) b başlatmak mümkün mü?

CEVAP
13 HAZİRAN 2014, Cuma


Garip bir şekilde, neden bu çalışmaları -1 tam olarak sebebi bu işler ile sıfır: two's complement binary representation, -1 1s hepsi bit, boyutu ne olursa olsun, tamsayı, yani dolum bir bölge ile bayt dolu 1s üreten bir bölge -1 imzalı ints longs shorts üzerinde iki bilgisayarın tamamlayıcı donanım.

İki farklı donanım var sonuç farklı olacak tamamlıyor. -1 tamsayı sabiti standart dönüşüm yapılması için ne kadar özel olduğundan tüm olanlar unsigned char dönüştürülür. Ancak, tüm bunların bit 33 ** ayarlanmış bayt bölge platformun kurallarına uygun olarak ayrılmaz değerler olarak yorumlanır. İşaret-büyüklük donanım örneğin, dizinin tüm elemanları ilgili türün en küçük negatif değeri içerir.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Ludique

    Ludique

    21 NİSAN 2009
  • metal571

    metal571

    30 Mayıs 2006
  • spederson7

    spederson7

    17 Temmuz 2006