Bool tipi
C ile kullanılır. Açıklaması şöyle.
bool eskiden #define kullanılarak tanımlanırdı. Şöyle komik tanımlamalar bile vardı.
bool integral bir tiptir
Açıklaması şöyle.
Dolayısıyla bool için de aşağıdaki işlemler tanımlıdır.
C ile kullanılır. Açıklaması şöyle.
bool nerede tanımlı ?C did not originally have a Boolean type, it was added in the 1999 version of the language (C99). At that point, C++ was already standardized (in 1998) to use the type bool, with keywords false and true. To keep the C Boolean type separate from the one in C++, as well as preventing the new name from breaking old C code, it was named _Bool.
bool eskiden #define kullanılarak tanımlanırdı. Şöyle komik tanımlamalar bile vardı.
#define TRUE '/'/'/'
#define FALSE '-'-'-'
Yeni derleyiciler bool tipini built-in bir tip olarak işliyorlar.bool integral bir tiptir
Açıklaması şöyle.
Her integral tip için karşılaştırma işlemi tanımlıdırTypes bool, char, char16_t, char32_t, wchar_t, and the signed and unsigned integer types are collectively called integral types.
Dolayısıyla bool için de aşağıdaki işlemler tanımlıdır.
false < false = false
false < true = true
true < false = false
true < true = false
bool tipinin büyüklüğü belli değildir
Tamamen gerçekleştirime bağlı.
sizeof(char), sizeof(signed char) and sizeof(unsigned char) are 1; the result of sizeof applied to any other fundamental type is implementation-defined. [Note: in particular, sizeof(bool) and sizeof(wchar_t) are implementation-defined.69)]
sizeof(bool) is not required to be 1.
Örnek
Şöyle yaparız. Çıktı olarak 1 alırız.
Açıklaması şöyle.
Şöyle yaparız. Çıktı olarak 1 alırız.
std::cout<<sizeof(!0);
bool ile bit işlemleri yapılmazAçıklaması şöyle.
In C++ the bit representation (and even the size) of a bool is implementation defined; generally it's implemented as a char-sized type taking 1 or 0 as possible values.
If you set its value to anything different from the allowed ones (in this specific case by aliasing a bool through a char and modifying its bit representation), you are breaking the rules of the language, so anything can happen. In particular, it's explicitly specified in the standard that a "broken" bool may behave as both true and false (or neither true nor false) at the same time:
bool int'e çevrilebilir
Açıklaması şöyle. bool zaten integral bir tip olduğu için int'e de rahatlıkla çevrilebilir.
bool int'e çevrilebildiği için şöyle yaparız.
bool int'e çevrilebildiği için şöyle yaparız.
bool sadece true veya false değerleri veya buna karşılık gelen primitif bir değer yani 1 veya 0 atanabilir. Açıklaması şöyle.
primitif değer ataması yani 1 veya 0 yapılabilir. Şöyle yaparız
a değişkenine 1 veya 0 değeri atanmadığı için if (a) veya if (!a) da olsa hep true çıktısı verir
Sebebi ise yukarıdaki kodun muhtemelenAçıklaması şöyle. bool zaten integral bir tip olduğu için int'e de rahatlıkla çevrilebilir.
ÖrnekA prvalue of type bool can be converted to a prvalue of type int, with false becoming zero and true becoming one.
bool int'e çevrilebildiği için şöyle yaparız.
bool x = 1;
if (x==1)
Do something..
Örnekbool int'e çevrilebildiği için şöyle yaparız.
bool y = 0;
if (y>0.5)
Do something..
bool'a değer atamakbool sadece true veya false değerleri veya buna karşılık gelen primitif bir değer yani 1 veya 0 atanabilir. Açıklaması şöyle.
Çünkü bool derleyici tarafından aşağıdakine benzer bir halde kullanılıyor.6.2.6 Representations of types6.2.6.1 General5 Certain object representations need not represent a value of the object type. If the stored value of an object has such a representation and is read by an lvalue expression that does not have character type, the behavior is undefined. [...]
a = 00000000 (false)
!a = 11111111 (true)
Örnekprimitif değer ataması yani 1 veya 0 yapılabilir. Şöyle yaparız
bool x = 1; // x will be true
bool y = 0; // y will be false
bool z = 1; // z will be true
Örneka değişkenine 1 veya 0 değeri atanmadığı için if (a) veya if (!a) da olsa hep true çıktısı verir
#include <cstring>
#include <iostream>
bool a;
memset(&a, 0x03, sizeof(bool));
if (a) {
std::cout << "a is true!" << std::endl;
}
if (!a) {
std::cout << "!a is true!" << std::endl;
}
a = 00000011 (true)
!a = 11111100 (also true)
şeklinde çalışmasıDerleyici
Şu açıklamada bool kullanırken derleyicinin 1 veya 0 olduğunu kontol eden kod ürettiği için girdilerde boolean kullanılmasının çok verimli olmayan kodlara sebep olduğu söyleniyor. Ancak sanırım artık bu açıklama güncel değil.
Boolean variables are stored as 8-bit integers with the value 0 for false and 1 for true. Boolean variables are overdetermined in the sense that all operators that have Boolean variables as input check if the inputs have any other value than 0 or 1, but operators that have Booleans as output can produce no other value than 0 or 1. This makes operations with Boolean variables as input less efficient than necessary.
Hiç yorum yok:
Yorum Gönder