博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
The type promotion rules (类型提升规则,以及类型转换规则)
阅读量:6917 次
发布时间:2019-06-27

本文共 1004 字,大约阅读时间需要 3 分钟。

hot3.png

int main(int argc, char *argv[]){//  printf(" %d ", sizeof 65);	printf(" %d ", sizeof 'A');	system("pause");	return 0;}

 Type conversions in C are much more widespread than is generally realized. They can also occur in

    any expression that involves a type smaller than int or double. Take the following code, for  example:

如上代码,输出可能是1 可能是4,如果'A' 字面意思 那么就是char,而'A' 的ASCII 是 65是一个int ,所以输出

在不同额编译器下输出不同,这就是类型提升,此例中char类型被提升为int类型,GCC下输出4,VS输出1

 

规则如下:

141159_YOkI_1391394.png

又如

 

正负转换:

int main(int argc, char *argv[]){ 	char a, b, c;	a = 'a';	b = 'b';	c = a + b;	//195=11000011	//  00111101	cout << (int)(char)(0xc3);	 	system("pause");	return 0;}

由于+运算,根据提升 规则char被提升为int 结果就是int 的195,195=0xc3 被赋值给char 11000011 取反加一 变为00111101加上负号,其结果为-61,同理

int main(int argc, char *argv[]){	cout <<( int) ( char)(0xff) ;	return 0;}

转换为char 后 取反加一 为 0000001 加上负号输出-1

 

 

小字节转换为大字节:高位补0,

大字节转换为小字节:截断

int main(int argc, char *argv[]){ 	cout << (int)(char)(0xff)<

 

 

Tip:强制转换内存实际数据不变 具体表现出来的值按照目标数据类型规则来算

转载于:https://my.oschina.net/kkkkkkkkkkkkk/blog/685973

你可能感兴趣的文章
java.util.concurrent包(3)——线程间通信wait/notify和await/signal
查看>>
1_Shell语言———shell语言简介
查看>>
flask从文本中提取出ip
查看>>
专业术语收集
查看>>
【转】这些年,我收集的JavaScript代码(二)
查看>>
python datetime简单使用
查看>>
Hello 大家好,欢迎来到我的新博客
查看>>
博客,我们是写给谁看的
查看>>
linux系统调优及安全设置
查看>>
MediaInfo源代码分析 4:Inform()函数
查看>>
Spread for Windows Forms高级主题(2)---理解单元格类型
查看>>
使用kickstart软件自动化安装CentOS 6.X操作系统
查看>>
2015新题型
查看>>
二进制与十进制整数,浮点数相互转换
查看>>
zabbix监控(二)添加新主机、自定义监控
查看>>
支付宝升级延时到账功能
查看>>
静默安装oracle
查看>>
Java SE 7新特性:创建泛型实例时自动类型推断
查看>>
一个C++程序
查看>>
【小松教你手游开发】【unity实用技能】线性差值计算实现
查看>>