0
비트 단위 연산을 사용하여 루프를 만들었으므로 모든 다른 비트가 켜져 있습니다 (예 : 8 비트의 경우 01010101).uint64 및 uint32에서 작동하는 루프가 uint8 또는 uint16에서 작동하지 않습니다.
이론적으로 루프는 잘 작동하며 uint32 및 uint64에서는 작동하지만 uint8 또는 uint16에서는 정상적으로 작동하지 않습니다. 나는
여기 코드 이유 ... 궁금 : "작은 INT보다는"starblue으로@autoreleasepool {
// a = 00000000
uint32 a = 0;
// b = 11111111
uint32 b = ~a;
// a = 11111111
a = ~a;
// if (a = 01010101) ~a = 10101010, a << 1 = 10101010
while (~a != (a << 1)) {
// 1st time: a << 1 = 11111110 = a
// 2nd time: a << 1 = 11111010 = a
a = a << 1;
// 1st time: ~a = 00000001 = a
// 2nd time: ~a = 00000101 = a
a = ~a;
// 1st time: a << 1 = 00000010 = a
// 2nd time: a << 1 = 00001010 = a
a = a << 1;
// 1st time: b^a = 11111101 = a
// 2nd time: b^a = 11110101 = a
a = b^a;
}
NSLog(@"%x", a);
NSLog(@"%u", b);
// Apply the same loop to a bigger scale
uint64 x = 0x0;
uint64 y = ~x;
x = ~x;
while (~x != (x << 1)) {
x = x << 1;
x = ~x;
x = x << 1;
x = y^x;
}
NSLog(@"%llx", x);
NSLog(@"%llu", x);
}
return 0;
에 오신 것을 환영합니다 SO에 대한 것입니다! 실제로 작동하지 않는 것에 관해 더 자세한 정보를 제공 할 수 있습니까? 당신은 어떤 결과물을보고 있습니까? – Derek
감사합니다. 위의 코드는 정상적으로 작동하지만 uint32를 uint8 또는 uint16으로 대체하면 전체 코드가 무한 루프가됩니다. 나는 왜 그런지 이해하지 못합니다 ... – BridgeTheGap
실패는 int보다 작은 변수에 대한 정수 승격 때문일 가능성이 큽니다. –