다른거 다 필요없고 저기 mul = 어쩌구만 봐줘
mul 은 float 타입이고
itempmatrix[col][j]는 int 타입이라서 두개다 대충 요약하자면
float = (float) int / int
이렇게 됨
근데
11/8 하면 mul에 1이 들어가고 내가 원하는 1.375가 안들으감
왜이러는거징
다른거 다 필요없고 저기 mul = 어쩌구만 봐줘
mul 은 float 타입이고
itempmatrix[col][j]는 int 타입이라서 두개다 대충 요약하자면
float = (float) int / int
이렇게 됨
근데
11/8 하면 mul에 1이 들어가고 내가 원하는 1.375가 안들으감
왜이러는거징
해당 댓글은 삭제되었습니다.
ㅇㅇ 그거 예전에해봄
오댓다
(-((float)(a))/((float)(b)))
이렇게 a를 float으로 바꾸고 b를 float으로 바꾸면 결과는 입력이 int가 아닌 float이기에 float형이 나옴
int/int는 연산자 오버로딩 때문에 /의 특성에 의해 int가 나옴 연산자 오버로딩으로 float=float / float의 /와 int= int/int의 /는 /내부적으로 전혀 다른 함수가 호출됨
C++가 연산자를 타입에 따라 다른 함수를 갖고 있음
그걸 연산자 오버로딩이라구 함 ㅇㅅㅇ
int/int는 int가 나오는 나누기/를 호출하고 float/float는 float가 나오는 나누기/를 호출함
따라서 이게 C++이 정적타입으로 타입이 다른 연산들을 정적으로 지정해주는 방식임
고마벙
연산자 오버로딩이 여기서 왜튀어나와 연산자에 내부에 함수가 어딨어 씨발 모르면 닥치고있자
밍고스는 cout<<이게 연산자 오버로딩으로 돌아가는지 모르는 애네
cout<<'a'랑 cout<<31425랑 연산자 오버로딩인데
cout<<(string)의 경우엔 char *로 내부적으로 다른 자료형이랑 함수가 따로 호출됨 0이 나올 때까지 길게 출력해야돼서
기본 연산자는 C++ 내부적으로 내가 말한 대로 다 저렇게 돌아감 ㅇㅅㅇ
int/float는 float인지 int인지 컴파일러 내부를 까봐야되지만(float이겠지만) 컴파일러 내부적으로 연산자 오버로딩 쓰는 것처럼 돌아감 ㅇㅅㅇ
uint32 uint64 등등 쓸 때 int자료형끼리 호환을 맞추기 위해 컴파일러 내부적으로 다 저런 식으로 돌아감 ㅇㅅㅇ
자료형 연산마다 함수가 다 따로 컴파일러 내부에 다 구비되어있음 ㅇㅅㅇ
애초에 int내부에서도 자료형이 다 다른데 같은 함수를 써먹을 수 없지 ㅇㅅㅇ
결론: 연산자 오버로딩 아님 ㅇㅅㅇ;