123456如何在char类型转换中转换为'64'?

问题描述 投票:0回答:1
char c = 123456;

cout << c << endl;
warning: implicit conversion from 'int' to 'char' changes value from 123456 to 64 [-Wconstant-conversion]
    char c = 123456;
         ~   ^~~~~~
1 warning generated.

我得到这个输出。

char在c++中是1字节,范围是-128到127(有符号)和0到255(无符号),所以123456不能存储在其中,我明白,但是编译器如何将123456转换为char 64,其中ascii值“ @”.

我预计它会给我一个错误或转换它,但这个转换我无法理解。

c++
1个回答
0
投票

如果将十进制

123456
转换为十六进制,则会得到
1E240

A

char
,只有 1 个字节(当前所有感兴趣的机器都是 8 位),可以存储 2 个十六进制数字(1 个十六进制数字是 4 位,所以 8 位需要 2 个数字)。

因此,将太大的

1E240
分配给单个
char
将会在该
40
字节中留下十六进制
char
。计算机软件中的溢出(通常)会丢弃左边的数字,只保留右边合适的数字。

ASCII 表
中查找十六进制 40(或转换为十进制
64
然后查找)显示这是
@
字符。

再说一次,为什么是 ASCII?这是所有“相关”编码的基础,所以我什至不问你的盒子正在使用什么,因为它必然是 ASCII 的某种派生......

© www.soinside.com 2019 - 2024. All rights reserved.