gpt4 book ai didi

c++ - 在C++中将int转换为char时 “narrowing”如何工作?

转载 作者:行者123 更新时间:2023-12-01 14:43:08 24 4
gpt4 key购买 nike

我是C++的初学者,对转换有疑问。将int转换为char值时,如果在ASCII表上超过127,会发生什么?

例如,


using namespace std;

int main()
{
double d = 0;
while (cin>>d){
int i = d;
char c = i;
int i2 = c;

cout<<"d=="<<d<<endl;
cout<<"i=="<<i<<endl;
cout<<"c=="<<c<<endl;
cout<<"i2=="<<i2<<endl;
cout<<"char:("<<c<<")"<<endl;
}
}

现在,如果使用输入150,则当i = d时i变为150,当c = i时c变为û,这对我来说意味着int 150 = charû

但是,如果将int i2转换为整数,则i2 == 106,则在屏幕上输出int i2时

我的假设是int i2也将为150。

如果有人在我难以理解这个概念的情况下可以向我解释这一点,我将不胜感激。我已经读过,因为char可以容纳1个字节的信息,而int可以容纳4个字节的信息,所以该值“变窄”。我不确定是什么意思!

最佳答案

How does “narrowing” work when converting int to char in C++?



整数类型的宽度大约是它包含的字节(或位)数。因此,如果一种类型的字节(或位)较少,则它比另一种窄。

考虑一下 int的物理表现形式-它是一个索引卡,上面标有八个方框,我们可以在每个方框中写一位。也许这些自动光学系统之一会读取它,但是无论如何我们都不允许在那儿挤更多的数字或在盒子外面写东西。

现在,我们有一张等效的卡,代表一个 char-它上面有两个框。
char卡在物理上也可以更窄,以使类推真正生效,但是重要的是您只能写两位数字。

因此,在基数10中, int卡可以存储0-99,999,999,而 char可以存储0-99。

现在,我给您一张上面写有数字 int123卡,并要求您将值复制到 char卡上。你能做什么?您可以舍弃不适合的几百位数,而只需编写 23即可。或者,我想您可以吓一跳并拒绝。通常,我们希望计算机做前者。

是缩小的转换。 char太小(狭窄),无法容纳 int可以包含的所有信息。

最后,为了描述实际的 intchar类型,我们可以使用二进制(在这种情况下,我们只能使用数字 01,并且 int卡有32个盒子,而 char卡有8个盒子),或者我们可以离开如果我们以16为底而不是10为底,则我们的索引卡大小相同。
int是带符号的,这会带来进一步的复杂性,因此我们也需要用固定的位数来表示负值。 char可以是有符号的或无符号的-它取决于实现。如果您有兴趣,可以查找二进制补码,这是存储有符号值的最常用方法,但是通常可以存储的值的一半将为负数。

大致来说,缩小转换可以做错事情的两种方法是:
  • 较窄的类型没有足够的数字,所以有些被切断了
  • 较窄的类型可以容纳所有数字,但是带符号,并且该特定模式在窄类型中表示负数(假设在较宽的类型中为正数)
  • 关于c++ - 在C++中将int转换为char时 “narrowing”如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61031845/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com