字符到整数的转换 - 这里发生了什么?
char to int conversion - what's happening here?
我想将char
值转换为int
.我正在使用以下代码片段:
#include <iostream>
using namespace std;
int main() {
char a = 'A';
int i = (int)a;
//cout<<i<<endl; OUTPUT is 65 (True)
char b = '18';
int j = b;
//cout<<j<<endl; OUTPUT is 56 (HOW?)
char c = 18;
int k = c;
//cout<<c<<endl; OUTPUT is empty
//cout<<k<<endl; OUTPUT is 18 (Is this a valid conversion?)
return 0;
}
我想要第三次转换,我得到了正确的输出,即18
.但这是有效的转换吗?谁能解释一下上述输出及其策略?
char a = 'A';
int i = (int)a;
石膏是不必要的。将数值类型的对象赋值或初始化为任何其他数值类型的值会导致隐式转换。
存储在 i
中的值是您的实现用于表示字符的任何值 'A'
。如今,在几乎所有系统上(除了一些IBM大型机,也许还有其他一些),这种价值将是65
。
char b = '18';
int j = b;
具有多个字符的字符文本属于 int
类型,并具有实现定义的值。该值很可能是'1'<<8+'8'
的,并且从char
到int
的转换会丢弃高阶位,留下'8'
或56
。但是多字符文字是要避免的。(这不适用于像 'n'
这样的转义序列;尽管单引号之间有两个字符,但它表示单个字符值。
char c = 18;
int k = c;
char
是整数类型;它可以轻松地将整数值保存18
。将该值转换为int
只会保留该值。所以c
和k
都是整数变量,其 valie 是 18
。打印k
使用
std::cout << k << "n";
将打印18
,但打印c
使用以下方法:
std::cout << c << "n";
将打印一个不可打印的控制字符(它恰好是 Control-R)。
char b = '18';
int j = b;
b,在这种情况下,"18"的字符没有非常一致的含义,并且具有依赖于实现的行为。在您的情况下,它似乎被转换为 ascii 值 56(相当于您从字符 b = '8' 得到的值)。
char c = 18;
int k = c;
C 保存字符值 18,转换为 int 是完全有效的。但是,如果您显示为字符,它可能不会显示太多。它是一个非打印控制字符。
相关文章:
- 此测试()中发生了什么意外过程?为什么总是覆盖 ch[0 1 2..]?
- 这C++代码中发生了什么C++(指数函数)
- 哪种方式更快?究竟发生了什么,我们没有看到什么?
- 我正在将一个 std::string 传递给一个 boost 函数,该函数对该类型进行常量引用,但该值发生了变化
- 我的C++合并排序代码不起作用。我在这里错过了什么?
- c++问题:给一个变量赋值后,另一个变量发生了变化
- istringstream,num1 和 num2 在这里发生了什么?
- C++ - *(int**) 地址?这里发生了什么?
- 这里的矢量数组发生了什么?
- 这里发生了什么,还有输出是什么?(无线索)
- 如果有人能向我解释这里发生了什么
- 有人可以解释一下这里发生了什么(类和构造函数/析构函数)吗?
- 值未存储在向量中 - 不确定这里发生了什么
- 为什么 x 0 在这里,x=1 语句中发生了什么?
- 这里的计算机内存中发生了什么
- 字符到整数的转换 - 这里发生了什么?
- 有趣的调试,这里发生了什么
- 带有模板的类模板 同学朋友,这里到底发生了什么?
- 我的ArrayStack在这里发生了什么
- 这里到底发生了什么