Tam Sürümünü Görmek İçin : bool değişkenine bir değer atarken
ankakusu
01/12/2007, 09:10
Merhaba,
ben bool değişkenine bir değer atamaya çalışıyorum.
Mesela :
bool var1;
var1=false;
var1=0;
ama bu iki ifade de hata veriyor.
yani bir şekilde 0'ı,1'i yada true,false
tanımıyor. Bunları tanımasını nasıl
sağlayabilirim?
standart c'de bool die bir değişken yoktur.
int kullanman lazım.
ankakusu
01/12/2007, 11:48
oyle de ben bool bir arrayi recursion yaparak
kullanacağım.
Eğer int kullanırsam çok fazla hafıza yiyor.
İçine sadece 1 yada 0 atayacağım bir değişkeni
int olarak tanımlarsam int değişkenini
gereksiz kullanmış olurum...
O zaman ne yapmak gerekiyor?
aslında yer sorunun varsa char'da kullanabilirsin. Biraz daha bellek kullanımın indi :)).
Artık bundan daha ekonomiği int dizisi kullanıp her bit'i boolean olarak kullanmak kalıyor. Merakla bununla ilgili bir şeyler yazdım. Yalnız çok güvenli olduğunu sanmıyorum. Test edip belki kullanabilirsin.
Gene de uyarıyorum: "Take your own risk"
#include<stdlib.h>
# define UNITY 0x00000001
#define GETBIT(x,pos) ( ((x) & ( UNITY << (pos) ))!=0 )
#define SETBIT(x,pos) ( (x) | ( UNITY << (pos) ) )
#define RESETBIT(x,pos) ( (x) & ~( UNITY << (pos) ) )
#define FALSE 0
#define TRUE 1
#define ArraySize 100
int bitNumInInt = sizeof(int) * 8;
int * AllocateBoolArray(int *array, int size)
{
int intArraySize = size / bitNumInInt + 1;
array = (int * )malloc(intArraySize * sizeof(int));
return array;
}
void SetBoolValue(int *boolArray,int index, int value)
{
int arrayIndex;
int intIndex;
if(index >= 0 && index < ArraySize)
{
arrayIndex = index / bitNumInInt;
intIndex = index % bitNumInInt;
if(value == TRUE)
SETBIT(boolArray[arrayIndex], bitNumInInt);
else
RESETBIT(boolArray[arrayIndex], bitNumInInt);
}
}
int GetBoolValue(int *boolArray, int index)
{
int arrayIndex;
int intIndex;
if(index >= 0 && index < ArraySize)
{
arrayIndex = index / bitNumInInt;
intIndex = index % bitNumInInt;
return GETBIT(boolArray[arrayIndex],intIndex);
}
return 0;
}
void FreeBoolArray(int *array)
{
free(array);
}
int main(void)
{
int *boolArray;
int waitInt;
boolArray = AllocateBoolArray(boolArray,ArraySize);
SetBoolValue(boolArray,99, TRUE);
SetBoolValue(boolArray,0, TRUE);
SetBoolValue(boolArray,3, TRUE);
SetBoolValue(boolArray,15, TRUE);
printf("index 99: %d\n", GetBoolValue(boolArray,99));
printf("index 0: %d\n", GetBoolValue(boolArray,0));
printf("index 3: %d\n", GetBoolValue(boolArray,3));
printf("index 15: %d\n", GetBoolValue(boolArray,14));
FreeBoolArray(boolArray);
return 0;
}
ankakusu
01/12/2007, 14:10
Merhaba arkadaşlar,
ben çeşidi bit olan bir
değişkeni nasıl yaratmam
gerektiğini bilmiyorum.
internetten biraz baktım ama
bulamadım...
yazdığım yukarıdaki kod hatalı
Kahvaltı öncesi aceleyle post etmiştim.
Şimdi tekrar bakıyorum ;)
evet düzelttim gibi:
#include<stdlib.h>
# define UNITY 0x00000001
#define GETBIT(x,pos) ( ((x) & ( UNITY << (pos) ))!=0 )
#define SETBIT(x,pos) ( (x) | ( UNITY << (pos) ) )
#define RESETBIT(x,pos) ( (x) & ~( UNITY << (pos) ) )
#define FALSE 0
#define TRUE 1
#define ArraySize 100
int bitNumInInt = sizeof(int) * 8;
int * AllocateBoolArray(int *array, int size)
{
int intArraySize = size / bitNumInInt + 1;
array = (int * )malloc(intArraySize * sizeof(int));
return array;
}
void SetBoolValue(int *boolArray,int index, int value)
{
int arrayIndex;
int intIndex;
if(index >= 0 && index < ArraySize)
{
arrayIndex = index / bitNumInInt;
intIndex = index % bitNumInInt;
if(value == TRUE)
boolArray[arrayIndex] = SETBIT(boolArray[arrayIndex], intIndex);
else
boolArray[arrayIndex] = RESETBIT(boolArray[arrayIndex], intIndex);
}
}
int GetBoolValue(int *boolArray, int index)
{
int arrayIndex;
int intIndex;
if(index >= 0 && index < ArraySize)
{
arrayIndex = index / bitNumInInt;
intIndex = index % bitNumInInt;
return GETBIT(boolArray[arrayIndex],intIndex);
}
return 0;
}
void FreeBoolArray(int *array)
{
free(array);
}
int main(void)
{
int *boolArray;
int waitInt;
boolArray = AllocateBoolArray(boolArray,ArraySize);
SetBoolValue(boolArray,99, TRUE);
SetBoolValue(boolArray,0, TRUE);;
SetBoolValue(boolArray,3, FALSE);
SetBoolValue(boolArray,15, TRUE);
printf("index 99: %d\n", GetBoolValue(boolArray,99));
printf("index 0: %d\n", GetBoolValue(boolArray,0));
printf("index 3: %d\n", GetBoolValue(boolArray,3));
printf("index 15: %d\n", GetBoolValue(boolArray,15));
SetBoolValue(boolArray,99, FALSE);
SetBoolValue(boolArray,0, FALSE);
printf("index 99: %d\n", GetBoolValue(boolArray,99));
printf("index 0: %d\n", GetBoolValue(boolArray,0));
FreeBoolArray(boolArray);
return 0;
}
ankakusu
01/12/2007, 17:04
hmm evet şimdi oldu:)
çok teşekkür ederim...
çok büyük alanlar ayırmayacaksan hala char kullanmanı tavsiye ediyorum.
ama bu da çalışıo, güzel oldu :-)
kutuphanelerden sonra sunlari eklersen koduna olur en azindan ben de oluyor
#include <stdbool.h>
#define true 1
#define false 0
herhangi bi fonksiyonun geri donus degeri bool cinstense kullanimida su sekilde
bool f(){
/*
*/
return false;
}
boolean tipinde değişken türü yokmu c de arkadaşlar
sekizbit
04/05/2008, 00:42
dosya uzantisiniz CPP yap, derleyici olarak cpp derleyicisi kullan (mesela gcc kullaniyorsan g++ kullan) bu sekilde yazdigin C kodunda hic bir degisiklik yapmadan bool degiskenini kullanabilirsin.
acehreli
04/05/2008, 11:11
kgulle, C'de bool tipi yok.
Ali
Forum Yazılımı : vBulletin v3.6.8, Copyright ©2000-2008, Jelsoft Enterprises Ltd.