0ul 에서 ul을 사용하는 이유는?

einsok의 이미지

커널쪽 소스를 보니 0값 뒤에 ul을 붙여주는 경우가 있던데
unsigned long이라는 의미같은데 뭐하러 붙여주는건가요?
^^;;

cinsk의 이미지

크기가 작은 경우, 그리고 특별한 suffix(접미사)를 붙이지 않은 경우, 정수 상수의 타입은 `int'입니다. 따라서 강제로 `long int'로 만들어 주기 위해서 'l' 또는 'L'을 붙입니다.

연산 도중 혹시나 일어날 지 모르는 overflow을 막기 위해서 상수를 강제로 `unsigned' type으로 만들어 주기 위해 'u' 또는 'U'를 붙입니다. 원래 `unsigned' type에서 연산 결과가 나타낼 수 없는 범위의 값이면 modulo (나머지) 연산을 통해, 어찌되었든, 표현할 수 있는 값으로 바뀌어 집니다.

대부분의 코드에서 `signed' type을 써도 큰 무리가 없지만, 원칙대로라면, `signed' type 연산에서 overflow가 일어나면, undefined behavior를 일으킵니다.

마지막으로, 다음부터는 실제 코드를 보여 주시기 바랍니다. 추측만으로 답하는 것은 한계가 있네요. :wink: