为什么 sizeof(char + char)= 4?
2016-06-10 14:47
274 查看
下面的英文解释是stackoverflow上的同行解释 。
In C language operands of almost all arithmetic operators are subjected to implicit conversions calledusual arithmetic conversions or, in this case,
integer promotions.
Operands of type char are promoted to type int and the actual addition is performed within the domain of int (or unsigned int, depending on the properties of
char on that platform).
So your a + b is actually interpreted as (int) a + (int) b. The result has type int and sizeof(int) is apparently 4 on your platform. That 4 is what you see.And don't use %d to printf the result
of sizeof. The result of sizeof has type size_t, while %drequires an int argument. So, either use the proper format specifier.
printf("%zu\n", sizeof(a+b));or at least cast the argument if you are sure it fits printf("%d\n", (int) sizeof(a+b));
上面这段话的意思用代码解释如下:
#include <iostream>
using namespace std;
int main(int argc, char **argv)
{
char a,b;
a = 'a';
b = 1;
cout << "a + b = " << a + b << endl;
cout << "a + b = " << (char)(a + b) << endl;
getchar();
return 0;
}
运行上面的程序得到如下结果:
a + b = 98
a + b = b
字符a和b相加后会自动转换成int类型进行相加即'a'(ACSII为97)+ 1 = 98,如果将相加的结果转换成char类型即将98转换成char类型得到字符'b'。
所以sizeof(char + char)= sizeof(int) = 4;
In C language operands of almost all arithmetic operators are subjected to implicit conversions calledusual arithmetic conversions or, in this case,
integer promotions.
Operands of type char are promoted to type int and the actual addition is performed within the domain of int (or unsigned int, depending on the properties of
char on that platform).
So your a + b is actually interpreted as (int) a + (int) b. The result has type int and sizeof(int) is apparently 4 on your platform. That 4 is what you see.And don't use %d to printf the result
of sizeof. The result of sizeof has type size_t, while %drequires an int argument. So, either use the proper format specifier.
printf("%zu\n", sizeof(a+b));or at least cast the argument if you are sure it fits printf("%d\n", (int) sizeof(a+b));
上面这段话的意思用代码解释如下:
#include <iostream>
using namespace std;
int main(int argc, char **argv)
{
char a,b;
a = 'a';
b = 1;
cout << "a + b = " << a + b << endl;
cout << "a + b = " << (char)(a + b) << endl;
getchar();
return 0;
}
运行上面的程序得到如下结果:
a + b = 98
a + b = b
字符a和b相加后会自动转换成int类型进行相加即'a'(ACSII为97)+ 1 = 98,如果将相加的结果转换成char类型即将98转换成char类型得到字符'b'。
所以sizeof(char + char)= sizeof(int) = 4;
相关文章推荐
- C#中sizeof的用法实例分析
- 浅析C语言中的sizeof
- 深入sizeof的使用详解
- C语言中的sizeof操作符用法及和strlen的区别
- sizeof()的简单介绍
- C语言中sizeof()与strlen()函数的使用入门及对比
- 基于Sizeof与Strlen的区别以及联系的使用详解
- 浅析C/C++中被人误解的SIZEOF
- 解决不用sizeof求出int大小的方法
- C++ sizeof 实例解析
- C语言中关于sizeof 和 strlen的区别分析
- 对C语言中sizeof细节的三点分析介绍
- 关于操作系统各种数据类型的内存分配的一点探讨
- Sizeof与Strlen的区别与联系
- sizeof使用
- C语法陷阱:理解如何声明一个数组
- sizeof,strlen
- sizeof(struct)内存分配分析
- sizeof(struct)分析(包括union)
- 第三天学习笔记