强制类型转换:int num = '1234';

总结

由int num = '1234';是否能编译、输出结果问题,引发了一系列的问题。
按照以往的知识储备,我认为字符类型变量赋值给int整型变量,这是字符类型强转为int类型。那么强转的概念又是什么呢?


百度词条给出这样的定义:
image

基本数据类型有:1.整型:byte,short,int,long 2.浮点型:float,double 3.逻辑型:boolean 4.字符型:char
按照百度词条的定义分析:num是int类型,它是基本数据类型,那么它并不属于强制类型转化。

再看百度百科里给出的例子:

image

那么问题来了,int类型是基本数据类型,那它举的例子,并不满足给出的定义,存在争议。


数据类型转化应该是内存中的数据存入与读取时,字节大小或分配方式(结构体之间的转化)发生了变化,才应该算是强制转化。
与操作数是否为基本数据类型无关。并且int a = '1234'并非强制转化。


我并没有找到绝对的定义,那么我最初学习的“强制类型转换”这个定义又是由谁来给出的呢?


是否能够编译成功? 能成功 编译运行成功
如果编译成功,单引号中的数据如何存储至内存? 字符类型可以被强转成int类型 '1234'在内存中的表现形式为:31323334,读取时将4个字节作为一个整体读出赋值给num变量。此时没有空间变化,所以没有转化的过程
num值是多少? num的值应该是1234分别转为ascii值,然后读取,其中可能有大小端转化问题吧? image结果是:0x31323334,其中“转化”的概念并不存在。
如果将单引号变为双引号,结果是否一致? 这个不清楚,很少使用 不一致,编译报错了
单引号和双引号的区别是什么? 单引号是字符,双引号是字符串 单引号在内存中是该字符以ascii码形式存储在内存中,双引号会在末尾加上'\0',它们不一样
为char类型赋值时,等号右边是“a”,是否能够成功?结果是否正常? 可以,等号右边只有一个字符 image不可以,编译报错
如果‘1234’变成‘12345’呢? 应该能成功,最多是强转时,一部分数据被截断 image不可以,编译报错
如果int类型变为short呢? short类型只有两个字节,应该只能得到‘12’的值 image得到‘34’的值,其中包含大小端规则
posted @ 2022-10-24 17:51  Qing-Huan  阅读(88)  评论(0编辑  收藏  举报