PDA

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?


ortug
01/12/2007, 10:44
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?

bluekid
01/12/2007, 13:12
bit kullan

ortug
01/12/2007, 13:50
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...

ortug
01/12/2007, 14:25
yazdığım yukarıdaki kod hatalı
Kahvaltı öncesi aceleyle post etmiştim.
Şimdi tekrar bakıyorum ;)

ortug
01/12/2007, 14:42
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...

ortug
01/12/2007, 17:22
çok büyük alanlar ayırmayacaksan hala char kullanmanı tavsiye ediyorum.
ama bu da çalışıo, güzel oldu :-)

tujix
06/12/2007, 07:05
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;
}

kgulle
04/05/2008, 00:05
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