相変わらず大嫌いなビット演算。

b & 0xff == ? (b < 0) b + 256 : b;

どうしてコレが等しいのか直感的に理解できない。


public class B2I {
 
  public static void main(String[] args) {
 
    for (int b = Byte.MIN_VALUE; b <= Byte.MAX_VALUE; b++) {
      System.out.println(
      	b + " : " + b2i((byte)b) + " : " + and_0xff((byte)b));
    }
 
  }
 
  private static int b2i(byte b) {
    // int : 0 ~ 255 (0x00-0x0ff)
    // byte : -128 ~ 127
    if (b < 0) {
      return (int) b + 256;
    } else {
      return (int) b;
    }
  }
 
  private static int and_0xff(byte b) {
    return b & 0xff;
  }
 
}

以下、実行結果。


-128 : 128 : 128
-127 : 129 : 129
-126 : 130 : 130
-125 : 131 : 131
-124 : 132 : 132
-123 : 133 : 133
-122 : 134 : 134
-121 : 135 : 135
-120 : 136 : 136
-119 : 137 : 137
-118 : 138 : 138
-117 : 139 : 139
-116 : 140 : 140
-115 : 141 : 141
-114 : 142 : 142
-113 : 143 : 143
-112 : 144 : 144
-111 : 145 : 145
-110 : 146 : 146
-109 : 147 : 147
-108 : 148 : 148
-107 : 149 : 149
-106 : 150 : 150
-105 : 151 : 151
-104 : 152 : 152
-103 : 153 : 153
-102 : 154 : 154
-101 : 155 : 155
-100 : 156 : 156
-99 : 157 : 157
-98 : 158 : 158
-97 : 159 : 159
-96 : 160 : 160
-95 : 161 : 161
-94 : 162 : 162
-93 : 163 : 163
-92 : 164 : 164
-91 : 165 : 165
-90 : 166 : 166
-89 : 167 : 167
-88 : 168 : 168
-87 : 169 : 169
-86 : 170 : 170
-85 : 171 : 171
-84 : 172 : 172
-83 : 173 : 173
-82 : 174 : 174
-81 : 175 : 175
-80 : 176 : 176
-79 : 177 : 177
-78 : 178 : 178
-77 : 179 : 179
-76 : 180 : 180
-75 : 181 : 181
-74 : 182 : 182
-73 : 183 : 183
-72 : 184 : 184
-71 : 185 : 185
-70 : 186 : 186
-69 : 187 : 187
-68 : 188 : 188
-67 : 189 : 189
-66 : 190 : 190
-65 : 191 : 191
-64 : 192 : 192
-63 : 193 : 193
-62 : 194 : 194
-61 : 195 : 195
-60 : 196 : 196
-59 : 197 : 197
-58 : 198 : 198
-57 : 199 : 199
-56 : 200 : 200
-55 : 201 : 201
-54 : 202 : 202
-53 : 203 : 203
-52 : 204 : 204
-51 : 205 : 205
-50 : 206 : 206
-49 : 207 : 207
-48 : 208 : 208
-47 : 209 : 209
-46 : 210 : 210
-45 : 211 : 211
-44 : 212 : 212
-43 : 213 : 213
-42 : 214 : 214
-41 : 215 : 215
-40 : 216 : 216
-39 : 217 : 217
-38 : 218 : 218
-37 : 219 : 219
-36 : 220 : 220
-35 : 221 : 221
-34 : 222 : 222
-33 : 223 : 223
-32 : 224 : 224
-31 : 225 : 225
-30 : 226 : 226
-29 : 227 : 227
-28 : 228 : 228
-27 : 229 : 229
-26 : 230 : 230
-25 : 231 : 231
-24 : 232 : 232
-23 : 233 : 233
-22 : 234 : 234
-21 : 235 : 235
-20 : 236 : 236
-19 : 237 : 237
-18 : 238 : 238
-17 : 239 : 239
-16 : 240 : 240
-15 : 241 : 241
-14 : 242 : 242
-13 : 243 : 243
-12 : 244 : 244
-11 : 245 : 245
-10 : 246 : 246
-9 : 247 : 247
-8 : 248 : 248
-7 : 249 : 249
-6 : 250 : 250
-5 : 251 : 251
-4 : 252 : 252
-3 : 253 : 253
-2 : 254 : 254
-1 : 255 : 255
0 : 0 : 0
1 : 1 : 1
2 : 2 : 2
3 : 3 : 3
4 : 4 : 4
5 : 5 : 5
6 : 6 : 6
7 : 7 : 7
8 : 8 : 8
9 : 9 : 9
10 : 10 : 10
11 : 11 : 11
12 : 12 : 12
13 : 13 : 13
14 : 14 : 14
15 : 15 : 15
16 : 16 : 16
17 : 17 : 17
18 : 18 : 18
19 : 19 : 19
20 : 20 : 20
21 : 21 : 21
22 : 22 : 22
23 : 23 : 23
24 : 24 : 24
25 : 25 : 25
26 : 26 : 26
27 : 27 : 27
28 : 28 : 28
29 : 29 : 29
30 : 30 : 30
31 : 31 : 31
32 : 32 : 32
33 : 33 : 33
34 : 34 : 34
35 : 35 : 35
36 : 36 : 36
37 : 37 : 37
38 : 38 : 38
39 : 39 : 39
40 : 40 : 40
41 : 41 : 41
42 : 42 : 42
43 : 43 : 43
44 : 44 : 44
45 : 45 : 45
46 : 46 : 46
47 : 47 : 47
48 : 48 : 48
49 : 49 : 49
50 : 50 : 50
51 : 51 : 51
52 : 52 : 52
53 : 53 : 53
54 : 54 : 54
55 : 55 : 55
56 : 56 : 56
57 : 57 : 57
58 : 58 : 58
59 : 59 : 59
60 : 60 : 60
61 : 61 : 61
62 : 62 : 62
63 : 63 : 63
64 : 64 : 64
65 : 65 : 65
66 : 66 : 66
67 : 67 : 67
68 : 68 : 68
69 : 69 : 69
70 : 70 : 70
71 : 71 : 71
72 : 72 : 72
73 : 73 : 73
74 : 74 : 74
75 : 75 : 75
76 : 76 : 76
77 : 77 : 77
78 : 78 : 78
79 : 79 : 79
80 : 80 : 80
81 : 81 : 81
82 : 82 : 82
83 : 83 : 83
84 : 84 : 84
85 : 85 : 85
86 : 86 : 86
87 : 87 : 87
88 : 88 : 88
89 : 89 : 89
90 : 90 : 90
91 : 91 : 91
92 : 92 : 92
93 : 93 : 93
94 : 94 : 94
95 : 95 : 95
96 : 96 : 96
97 : 97 : 97
98 : 98 : 98
99 : 99 : 99
100 : 100 : 100
101 : 101 : 101
102 : 102 : 102
103 : 103 : 103
104 : 104 : 104
105 : 105 : 105
106 : 106 : 106
107 : 107 : 107
108 : 108 : 108
109 : 109 : 109
110 : 110 : 110
111 : 111 : 111
112 : 112 : 112
113 : 113 : 113
114 : 114 : 114
115 : 115 : 115
116 : 116 : 116
117 : 117 : 117
118 : 118 : 118
119 : 119 : 119
120 : 120 : 120
121 : 121 : 121
122 : 122 : 122
123 : 123 : 123
124 : 124 : 124
125 : 125 : 125
126 : 126 : 126
127 : 127 : 127

やっぱり等しい。

tags: zlashdot Java Java

Posted by NI-Lab. (@nilab)