기존 uint32의 MSB에 uint8을 추가하려는 바이트에서 작업을 수행하고 있습니다.
uint32 my_uint32;
my_uint32 = 0x00ffffffu;
my_uint32 = (uint32)(my_uint32) | ((uint8)(0x2u) << 24u)); // Add value 0x02 to the MSB of my_uint32
my_uint32 = 0x02ffffffu // This is what I get and is working so far
지금까지는 괜찮지 만 경고가 표시됩니다.
" ~ 또는 << 연산의 결과 인 표현식이 필수 유형으로 캐스트되지 않았습니다. "
다음을 수행하여 경고를받을 수 있습니다.
my_uint32 = ((uint32)(my_uint32) | (uint8)((0x2u) << 24u)); // Here I'm doing the uint8 cast on the complete shift operation
그러나 이것보다 작동하지 않습니다. 결과는 다음과 같습니다.
my_uint32 = 0x00ffffffu
내가 어떻게 경고에서 벗어날 수 있는지 아는 사람?
변경 my_uint32 = (uint32)(my_uint32) | ((uint8)(0x2u) << 24u));
에 my_uint32 = my_uint32 | ((uint32) 0x2u << 24);
.
기본적으로 시프트의 왼쪽 피연산자는 원하는 결과 유형으로 변환되어야 해당 유형으로 시프트가 수행됩니다. 에 캐스팅 uint8
시프트의 결과는 함께 수행되는 int
때문에 자동 승진을 입력합니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다