如何在C++中安全地比较32位整数和64位整数,以及如何在内部比较带符号整数
How can you safely compare a 32-bit integer with 64-bit integer in C++ and how signed integer is compared internally?
问题实际上来自这个片段
int a = -1;
unsigned int c=1;
long long b = c<<31;
printf("%d %lld %dn",a,b,a>b);
我在Linux gcc(gcc(4.4.6 20110731(Red Hat 4.4.6-3(上测试了它,结果是:-1 2147483648 0
事实上,我无法理解结果。我认为,当你做a>b时,a首先转换为长-长,所以a是0000…01111…1(32个零+32个一(,b是000…01000…00(32个0+1+31个零(,那么a应该大于b。
我是否缺少C++中的整数比较?
在比较之前,a
的值将转换为值为-1的long long
。
结果是正确的。a是一个有符号的int,所以-1是负数。b是一个有符号的长-长;它有一个正数。当然,负数不大于正数。
如果你想(出于某种原因!(将a显示为无符号长整型,可以这样做:
printf("%ull%lld%d\n",a,b,a>b(;
如果您想将其强制转换为无符号长整型:
无符号长-长a=ax;
如果你想将它与b进行比较,从而将其视为一个无符号的长-长w/o,并将其声明为:
printf("%d%lld%d\n",a,b,a>(无符号长-长(b(;
相关文章:
- C++模板函数,用于比较任何无符号整数和有符号整数
- 正在LLVM中检测整数比较条件
- 为什么:不同符号的整数比较只是偶尔发生?
- C++ 如何比较n个排序的整数向量以找到互元素?
- 比较C++中两个整数的最有效和最干净的方法是什么?
- 禁止指针和整数之间的比较C++
- ISO C++禁止指针和整数 [-fpermissive] [c++] 之间的比较
- Qsort() 比较结构体整数的总和
- 比较两个整数在C++中与未知 int 类型的相等性
- Qt 错误 iso c++ 禁止指针和整数之间的比较 -permissive
- 比较整数提升后的结果
- 对压缩整数进行加法、减法和比较
- 如何正确比较整数和浮点值
- 错误:ISO C++禁止在指针和整数 [-fallowive] 之间进行比较
- C++ 将二进制字符串转换为整数或比较 2 个字符串以查找差异数
- "正确"无符号整数比较
- C++,指向整数比较错误的指针
- C++指针与整数比较编译错误
- 为什么此指针/整数比较会生成分段错误
- 这是不可避免的有符号和无符号整数比较吗?