C语言 sizeof 整型提升 类型转换
2012-01-11 22:34
465 查看
如有错误请留言告知,谢谢!
C语言中整型提升的概念:
If an int canrepresent all the values of the original type, then the value is converted toint; otherwise the value is converted to unsigned int. This process is calledintegral promotion。
假如原始类型可以用int来表示,那么原始值会被转换为int,否则转换为unsigned int。
1.a,b本身类型为char
2.在C语言中,'A'本身就是int型(但不同的编译器计算出的结果差异非常大,用VC++6.0的时候输出sizeof('A')输出1,换DEV-C++,创建的C工程sizeof('A')的结果为4!。应该和创建工程时采取的默认编译标准不一样有关)
3.四则运算前,各个比int窄的加数自动提升为int,结果也为int类型,故size为4,sizeof只是确定表达式的存储长度,并不对值进行计算。
另外贴一个网上流传的,和整型提升有关的题目:
博主自己思考后的一个例子:
从这个结果可以判断出,unsigneg char类型的a、b,在代入表达式a+b计算的时候是自动被转换为int型来计算的。
这可以由控制输出%d,以及a+b的输出结果257来推断。因为%d的作用就是用来控制a+b的结果按照整型的格式来
输出,但是其输出的类型由后面的表达式类型来决定的。因为同样的两个%d,unsigned char c的输出结果就只能
输内存中的8bit,但是a+b提升到int后占用了32bit,所以输出结果就有上述不同了。
C语言中整型提升的概念:
If an int canrepresent all the values of the original type, then the value is converted toint; otherwise the value is converted to unsigned int. This process is calledintegral promotion。
假如原始类型可以用int来表示,那么原始值会被转换为int,否则转换为unsigned int。
#include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { char a,b; a = 'A'; b = 'B'; printf("sizeof(a)=%d, sizeof(b)=%d\n",sizeof(a),sizeof(b)); printf("sizeof('A')%d\n",sizeof('A')); printf("sizeof(a+b)=%d\n",sizeof(a+b)); system("PAUSE"); return 0; }
1.a,b本身类型为char
2.在C语言中,'A'本身就是int型(但不同的编译器计算出的结果差异非常大,用VC++6.0的时候输出sizeof('A')输出1,换DEV-C++,创建的C工程sizeof('A')的结果为4!。应该和创建工程时采取的默认编译标准不一样有关)
3.四则运算前,各个比int窄的加数自动提升为int,结果也为int类型,故size为4,sizeof只是确定表达式的存储长度,并不对值进行计算。
另外贴一个网上流传的,和整型提升有关的题目:
#include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { unsigned char a = 0xA5; unsigned char b = ~a>>4+1; printf("b=%d\n",b); system("PAUSE"); return 0; }
博主自己思考后的一个例子:
#include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { unsigned char a,b; unsigned char c; a = 255; b = 2; c = a + b; printf("output a+b = %d\n",(a+b)); printf("output c = %d\n",c); system("PAUSE"); return 0; }
从这个结果可以判断出,unsigneg char类型的a、b,在代入表达式a+b计算的时候是自动被转换为int型来计算的。
这可以由控制输出%d,以及a+b的输出结果257来推断。因为%d的作用就是用来控制a+b的结果按照整型的格式来
输出,但是其输出的类型由后面的表达式类型来决定的。因为同样的两个%d,unsigned char c的输出结果就只能
输内存中的8bit,但是a+b提升到int后占用了32bit,所以输出结果就有上述不同了。
相关文章推荐
- C语言中的数值类型转换:整型提升/寻常算术变化/截断/强制类型转换
- C语言中的整型提升与混合类型数据的运算
- C语言中的整型提升与混合类型数据的运算
- 程序员之---C语言细节24(段错误、类型提升、sizeof 'A')
- 隐式类型转换和整型提升
- [原创]c++整型提升(类型转换)
- 隐式类型转换和整型提升
- 关于整型提升,无符号类型与有符号类型之间的隐式转换
- 程序猿之---C语言细节24(段错误、类型提升、sizeof 'A')
- C语言关于类型的提升和转换
- 整型正数与负数是如何在机器(以stm32为例)中存储与传递的--结合C语言的数据类型转换讲解
- C语言学习2:sizeof ,数据类型,scanf,算式操作,赋值与比较操作,逻辑操作,位的操作,条件运算符,特异赋值结果,强制转换,使用变量要注意的
- c语言标识符,数据类型,sizeof和strlen区别及面试题
- C语言数据类型转换
- C语言 整型数到字符型的转换
- C语言隐式类型转换
- 【转】C语言隐式类型转换规则
- C语言中的类型转换
- AVA学习笔记之变量类型转换和类型自动提升
- C语言-类型转换