c++ - 比较 C++ 中的两种数据类型?
问题描述
INT的大小为4字节,CHAR为1字节。
INT的限制是-2,147,483,648 到 2,147,483,647,CHAR是-128 到 127。
#include <bits/stdc++.h>
using namespace std;
int main()
{
int a;
char b;
a = 66000;
b = 'C';
if (b == a)
std::cout << "1";
else
std::cout << "2";
}
上述函数的输出是
2
我不明白的是:
- C++ 如何比较两种不同的数据类型?我在谷歌上搜索,我没有找到满意的答案。
- 这是编译器问题还是我未能阅读的内容?
- 是
b == a
和a == b
相同的比较吗?顺序重要吗?
当a
的值为 67 时,上述程序给出“1”作为输出。
解决方案
它们的类型会自动(隐式)转换,然后进行比较。 https://www.learncpp.com/cpp-tutorial/44-implicit-type-conversion-coercion/
简而言之,
如果操作数是比 int 窄的整数,它会经历整数提升(如上所述)到 int 或 unsigned int。
如果操作数仍然不匹配,则编译器会找到最高优先级的操作数并隐式转换另一个操作数以匹配。
编辑:
b == a, a == b 它们是否属于同一比较类别?因为在 b == a 的情况下(char 与 int 比较),在 a == b 的情况下(反之亦然)
是的,它们是一样的。不论职位高低,char
都应晋升为int
类型。如果较大的转换为较小的类型,则有可能失去其价值。所以较小的应该提升为较大的类型。
推荐阅读
- angular - 检测 Angular 中验证器的变化
- ckeditor5 - 我怎样才能弄清楚为什么我的工具栏只有一个项目
- r - 如何将 char 列表转换为 R 中的整数列表?
- php - PHP 8 没有显示 short_open_tag 设置
- reactjs - 自定义挂钩的目的是什么?
- python - Using pytest-mock to mock objects and object methods
- node.js - 使用firebase Auth在服务器端登录但不在客户端
- go - 通过 socks5h 代理获取
- android - 如何在没有 Root 的 Android 11 上安装 HttpCanary 证书
- java - 一段时间后关闭警报对话框