32 비트 정수에서 bitely 연산을 수행해야합니다 (실제로는 represent chars, 그 밖에도 무엇이든).(uint32_t)를 하드 코딩 된 값과 비교하는 것이 안전합니까?
다음과 같은 종류의 코드가 안전한가요?
uint32_t input;
input = ...;
if(input & 0x03000000) {
output = 0x40000000;
output |= (input & 0xFC000000) >> 2;
나는 문은 "만약"에, 나는 왼쪽하는 uint32_t에,에 비트 연산을 수행하고, 의미, 그리고 오른쪽에 ... 나도 몰라!
하드 코딩 된 "0x03000000"의 유형 및 크기를 (즉, 얼마나 많은 바이트가 저장되어 있는지에 따라) 알 수 있습니까?
일부 시스템에서는 0x03000000을 int로 생각할 수 있으며 따라서 2 바이트에서만 코드를 작성할 수 있습니까? 이것은 대재앙이 될 수 있습니까?
나에게 완벽하게 잘 보이는 : C의 진수 상수는이 표현 될 수있는 첫 번째 유형이다. –
오른쪽이 가장 작은 정수형으로 승격됩니다 (int보다 짧으면'int'). 비교가 안전합니다. –
1. 언제든지 원하는대로 캐스팅 할 수 있습니다 :'(uint32_t) 0x03000000'. 2. 명확성과 재사용을 위해이 '#define'을 만들어야합니다. 캐스트도 추가 할 수 있습니다 :'#define MYBITS (uint32_t) 0x03000000'. –