HI-TECH C'de Matematiksel işlem sorunu?

Başlatan papylon, 07 Ekim 2009, 07:16:22

papylon

Ahmet hocam, "%lu" long için için tamam geçerli ama short long için 65536 değerini girdiğimde aşağıda ki şekilde çıkıyor. Bunun içinde ayrıca bir gösterim şekli daha mı var acaba?


ahmet2004

Değişken tanımları:

Uzunluk Sıfatı:
Bir değişkenin sahip olacağı sayı aralığını genişletmek veya daraltmak için kulanılırlar.
Bu sıfat isimleri 'short' ve 'long' olarak iki adettir.
short sadece int tipi için kullanılırken,long hem int hemde float için kullanılabilir.


Yani...


*****************************

Yazdığınız tür geçersiz.

*****************************



Keil ARM7 dede şöyle hata veriyor deyim:

unsigned short long sonuc = 16777215;
error: #84: invalid combination of type specifiers ------>   türü geçersiz kombinasyon belirteçleri

papylon

Long da zaten int tipi değimli?
HI-TECH C manuel'in 83. Sayfasında aşağıda ki gibi bir tablo var, ben de tanımlamaları ona göre yapmıştım. Bu tabloda da 3-Byte'lık int olarak görünüyor.
Bu durumda, böyle bir tanımlama ANSI C standartlarına uyumlu bir tanımlama değil, sadece HI-TECH C'ye özgü bir tanımlama şekli mi?


Erol YILMAZ

C dilini bildikçe öğrendikçe daha da kolaylaşır ve imkanları artırır :)

C çok farklı platformlarda çalışabileceği için bir Tip tanımlamasının
diğerine uymaması çok garip bir durum değil.

Bu yüzden Typedef ile kullanılan C derleyicisine özel olarak
bir Tip tanımlaması yapmak çok faydalı olacaktır.

Böylelikle aynı kodlar için derleyici değiştirdiğimizde sadece
birkaç tanımlamayı değiştirerek yeni derleyiciye uyum sağlayabiliriz.



Ben bu şekilde kullanıyorum...

papylon

Peki uint24'ü nasıl tanımlayacağız?  :D

Erol YILMAZ

Alıntı yapılan: "papylon"Peki uint24'ü nasıl tanımlayacağız?  :D

Eh artık onu da sen bul :D

ahmet2004

*papylon*

Alıntı Yap
Bu durumda, böyle bir tanımlama ANSI C standartlarına uyumlu bir tanımlama değil, sadece HI-TECH C'ye özgü bir tanımlama şekli mi?

Evet öyle gözüküyor.Ama ansiC dışına çıktıklarını farketmişler durmuşlar orda.

LukeSkywalker

Konuyu hortlatıyorum ama bir sorum olacak.

SPBRG=((int)(20000000/(16UL * baud) -1));


diye bir kod var. Buradaki 16UL ne işe yaramakta tam olarak? Kaldırdığımda bölüm sonucu doğru çıkmıyor. Saat frekansını 4000000 yapınca düzgün çalışıyor.

LukeSkywalker

Hocam peki bu tanımlama her zaman sabitin sonuna mı yapılır? baudUL diye bilir miyiz?
bir çeşit  typecasting metodhu mu bu?

LukeSkywalker

Şu şekilde de yapılabilir o zaman;
SPBRG=((int)(20000000/(unsigned long)(16 * baud) -1));


Bir de hocam MPLAB'da C ile derlediğimiz kodu asm olarak nasıl görebiliriz?
??

LukeSkywalker


LukeSkywalker


Kadir Can(16F84)

unsigned long( 16 * baud )
kodunda önce unsigned long'a çevirilip daha sonra işlem gerçekleşiyor diye biliyorum.
Dolayısıyla hata çıkmaması normal.

LukeSkywalker

Evet sonuna harf eklemek daha kolay. Bunları öğrenebilmek için kitap var mı? Bu gibi incelikleri öğrenebilmek için? Yıllardır mikroC'de kod yazarak C ile kodlama yapıyoruz diye kendimizi kandırmışız. ULL nedir?

LukeSkywalker

Verdiğiniz cevaplar için çok teşekkür ederim. MPLAB'da üretilen asm kodlarını nasıl görebilirim bilginiz var mı?