01/10/2018, 15:36

So sánh số có dấu và số không dấu

Cho mình hỏi tại sao khi so sánh số -1 và sô 1 trong C++, kết quả lại cho ra số -1 lớn hơn vậy ạ???

Kiii viết 17:36 ngày 01/10/2018

Kết quả vẫn ra đúng mà bạn?

GDB online Debugger

GDB online Debugger | Code, Compile, Run, Debug online C, C++

Online GDB is online ide with compiler and debugger for C/C++. Code, Compiler, Run, Debug Share code nippets.

Le Ly Vinh viết 17:43 ngày 01/10/2018

Bạn chạy thử code này nè:

string s="A";
if (s.length()<-1) cout<<"-1 > 1";
else cout<<"-1<=1";
Kiii viết 17:43 ngày 01/10/2018

Nếu mình đúng thì 1 thằng size_t, 1 thằng int nên không so sánh được với nhau
Bạn cast thằng s.length() về kiểu int rồi so sánh thử

Le Ly Vinh viết 17:38 ngày 01/10/2018

Mình nghĩ là nó liên quan đến so sánh bit

rogp10 viết 17:36 ngày 01/10/2018

Lần sau bạn post đoạn code đang thắc mắc ngay từ đầu nhé

https://wiki.sei.cmu.edu/confluence/display/c/INT02-C.+Understand+integer+conversion+rules

5. Otherwise, both operands are converted to the unsigned integer type corresponding to the type of the operand with signed integer type

size_t chắc chắn là không dấu nên -1 > 1TRUE.

Le Ly Vinh viết 17:45 ngày 01/10/2018

Mình xin lỗi, mình sẽ rút kinh nghiệm ở lần sau. Nhưng cho mình hỏi lại điều đó có nghĩa là -1 -> (unsigned int) 4294967294 > 1 đúng không

rogp10 viết 17:45 ngày 01/10/2018

x86 thì đổi -1 về 4294967295 bạn vì -1 viết là 32 bit 1 trong hệ bù 2.

Le Ly Vinh viết 17:45 ngày 01/10/2018

Sorry bạn mình nhầm lẫn tí.

Bài liên quan
0