Autor Beitrag
gerd99
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 22



BeitragVerfasst: So 03.05.20 22:01 
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
const x:array[1..3of boolean;

x=(false,true,false);

// ich moechte gerne sowas:

const x: array[1..3of 0 und 1 boolean

x=(0,1,0);


Ich möchte gerne den Boolean-Ausdruck so verwenden, dass ich mit den Zahlen 0 und 1 operiere und nicht mit false und true.
Geht das?

Gerd


Moderiert von user profile iconTh69: Topic aus Algorithmen, Optimierung und Assembler verschoben am Mo 04.05.2020 um 09:02
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19272
Erhaltene Danke: 1740

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: So 03.05.20 22:13 
Intern ist ein Boolean so ähnlich definiert. 0 ist False, alles andere ist True. Aber so wie gezeigt geht es nicht, nein.

Das ist auch der Grund weshalb Nonsens-Vergleiche wie "if (a > b) = True then" böse fehlschlagen können (wenn auch in der Regel nicht).

Was möchtest du denn machen?
gerd99 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 22



BeitragVerfasst: Mo 04.05.20 17:59 
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
t3_wege:array[1..128of TTweg=       //eigener Stein gleicher Farbe
(
(h:(1,1,1,1,1,1,1)),     //0,     0 0 0 0 0 0 0
(h:(1,1,1,1,1,1,0)),     //64,     0 0 0 0 0 0 1
(h:(1,1,1,1,1,0,0)),     //32,     0 0 0 0 0 1 0
(h:(1,1,1,1,1,0,0)),     //96,     0 0 0 0 0 1 1
(h:(1,1,1,1,0,0,0)),     //16,     0 0 0 0 1 0 0
(h:(1,1,1,1,0,0,0)),     //80,     0 0 0 0 1 0 1
(h:(1,1,1,1,0,0,0)),     //48,     0 0 0 0 1 1 0
(h:(1,1,1,1,0,0,0)),     //112,     0 0 0 0 1 1 1
(h:(1,1,1,0,0,0,0)),     //8,     0 0 0 1 0 0 0
(h:(1,1,1,0,0,0,0)),     //72,     0 0 0 1 0 0 1
(h:(1,1,1,0,0,0,0)),     //40,     0 0 0 1 0 1 0
(h:(1,1,1,0,0,0,0)),     //104,     0 0 0 1 0 1 1
(h:(1,1,1,0,0,0,0)),     //24,     0 0 0 1 1 0 0
(h:(1,1,1,0,0,0,0)),     //88,     0 0 0 1 1 0 1
usw.


ich habe jetzt die Zahlen als byte deklariert. Ich möchte Speicher sparen.
Wenn ich mit true und false die Tabelle fülle schaut das nicht mehr so schön aus.
Das ist der Grund

Gerd
OlafSt
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 486
Erhaltene Danke: 99

Win7, Win81, Win10
Tokyo, VS2017
BeitragVerfasst: Di 05.05.20 07:39 
Speicher sparen in einer Zeit, wo 16GB RAM keine 80€ kosten ?

Das ist sinnlose Mühe. Sauberer, schneller, auch nach 5 Jahren noch leicht verständlicher Code, Fehlerfreiheit - das sind Tugenden, die es anzustreben gilt. Auf Speicherverbrauch brauchst du wirklich nicht achten.

_________________
Lies, was da steht. Denk dann drüber nach. Dann erst fragen.
Nersgatt
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1581
Erhaltene Danke: 279


Delphi 10 Seattle Prof.
BeitragVerfasst: Di 05.05.20 16:22 
user profile icongerd99 hat folgendes geschrieben Zum zitierten Posting springen:

ich habe jetzt die Zahlen als byte deklariert. Ich möchte Speicher sparen.
Wenn ich mit true und false die Tabelle fülle schaut das nicht mehr so schön aus.
Das ist der Grund


Eine Boolean-Variable belegt auch 1 Byte. Da sparst Du nichts.
Ich würde das trotzdem als Boolean deklarieren, auch wenn der Code nicht Deinen ästhetischen Ansprüchen genügt. :D
Denn das macht Dir die Arbeit im eigentlich Quellcode einfacher und an der Stelle ist es dann schöner.

Du könntest auch die Einträge in Deinem Array als Byte (array[1..128] of Byte) deklarieren und dann Masken arbeiten, um abzufragen, ob ein Bit gesetzt ist, oder nicht.

_________________
Gruß, Jens
Zuerst ignorieren sie dich, dann lachen sie über dich, dann bekämpfen sie dich und dann gewinnst du. (Mahatma Gandhi)