PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : umwandlung von char nach unsigned int



axeljaeger
03-02-2003, 13:24
Ich hab ein kleines Progrämmchen geschrieben, und das macht nicht, was ich will:

#include <iostream>

int main(int argc, char ** argv)
{
for(int i = 0; i < 255; i++)
{
char c = i;
cout << (unsigned int)c << endl;
}

return 0;
}

Und jetzt sie Ausgabe:
Bis 127 funktioniert alles, wie geplant, aber dann kommt irgendwie Bockmist raus:

[axel@axel axel]$ g++ test.cpp
test.cpp:12:1: warning: no newline at end of file
[axel@axel axel]$ ./a.out
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
4294967168
4294967169
4294967170
4294967171
4294967172
4294967173
4294967174
4294967175
4294967176
4294967177
4294967178
4294967179
4294967180
4294967181
4294967182
4294967183
4294967184
4294967185
4294967186
4294967187
4294967188
4294967189
4294967190
4294967191
4294967192
4294967193
4294967194
4294967195
4294967196
4294967197
4294967198
4294967199
4294967200
4294967201
4294967202
4294967203
4294967204
4294967205
4294967206
4294967207
4294967208
4294967209
4294967210
4294967211
4294967212
4294967213
4294967214
4294967215
4294967216
4294967217
4294967218
4294967219
4294967220
4294967221
4294967222
4294967223
4294967224
4294967225
4294967226
4294967227
4294967228
4294967229
4294967230
4294967231
4294967232
4294967233
4294967234
4294967235
4294967236
4294967237
4294967238
4294967239
4294967240
4294967241
4294967242
4294967243
4294967244
4294967245
4294967246
4294967247
4294967248
4294967249
4294967250
4294967251
4294967252
4294967253
4294967254
4294967255
4294967256
4294967257
4294967258
4294967259
4294967260
4294967261
4294967262
4294967263
4294967264
4294967265
4294967266
4294967267
4294967268
4294967269
4294967270
4294967271
4294967272
4294967273
4294967274
4294967275
4294967276
4294967277
4294967278
4294967279
4294967280
4294967281
4294967282
4294967283
4294967284
4294967285
4294967286
4294967287
4294967288
4294967289
4294967290
4294967291
4294967292
4294967293
4294967294
[axel@axel axel]$

anda_skoa
03-02-2003, 13:41
Wenn nichts dabei steht, dann ist ein Typ signed.
In dem Fall das char.
bis 127 ist das vorderste Bit 0, ab 128 ist es 1, was in 2er Komplement darstellung eine negative Zahl bedeutet.

Dann castest du auf ein unsigned.
Das vorderste Bit bleibt 1, allerdings bedeutet es jetzt eine sehr große Zahl.

Du kannst versuche, vor dem Cast mit einer Bitmaske zu verknüpfen, oder das bei der Zuweisung auf unsigned char zu ändern.

Ciao,
_

ReSeT
03-02-2003, 14:13
In etwa so:




#include <iostream>

using namespace std;

int main(int argc, char **argv)
{

for(int i = 0; i < 255; i++)
{
char c = i;
cout << ((unsigned int)c & i) << endl;
}

return 0;
}





GreetZ