一、功能介绍
C语言中字节长度的思考 C语言中不同类型数据所占字节数的思考C语言中s izeof关键字的介绍 二、问题分析简单看下面一段代码,想一下输出应该是什么。
char cVar = 0x0100; int iVar = 0; printf("cVar = %d\n", cVar); printf("sizeof(int) = %d\n", sizeof(iVar));
这个问题不难,我的调试结果如下。
解释起来很容易,char型变量占1个字节,将两个字节大小的数值赋给它时产生了数据截断,即舍弃了高位数据0x01,所以cVar的值是0。一个int型数据占4个字节,所以sizeof(int)的值为4。
---- 这是一条分割线 ----
今天在知乎上看到了下面这张图片。
考虑16位字长的编译器中,char占1个字节,short占2字节,int占两字节,long占4字节。综合上面两位答主的表述,如果题主用的是16位字长的编译器,而且char型数据确实占了16位,那么一切就说的通了。
上面的答主说曾经在f2812中发现过这个现象,所以下载了c2000的编译器手册,简单看了看,关于数据类型长度的部分描述如下。
三、总结
1、sizeof()关键字为编译时确定(查询MSDN)。 2、sizeof()关键字返回目标所占字节数,但不同编译器中,字节所占位数可能有区别,不同变量所占字节数也可能不同。 3、char是char,byte是byte,尽管经常相等,但毕竟不是一个东西(char为字符型,某些模式中会占两个字节,byte为字节型,只一个字节)。四、示例代码demo13.h
/*** @file demo_13.h* @author 嵌入式男单第九名* @details 示例内容* -# sizeof()关键字为编译时确定* -# sizeof()关键字返回目标所占字节数* -# 不同编译器中,字节所占位数可能有区别* -# 不同编译器中,不同变量所占字节数可能有区别**************************************************/#pragma once#define DEMO_13 "\n字节数与字节位数 \n\n"/*** @brief 测试用例入口函数* @details * 1.验证char型变量所占位数* 2.验证int型变量所占字节数**************************************************/void demo_13(void);
demo13.c
/*** @file demo_13.c* @brief 字节数与字节位数* @author 嵌入式男单第九名**************************************************/#include "global.h"#include "demo_13.h"void demo_13(void){ printf(DEMO_13); char cVar = 0x0100; int iVar = 0; printf("cVar = %d\n", cVar); printf("sizeof(int) = %d\n", sizeof(iVar));}
五、函数调用
C语言学习调测框架六、相关链接1.知乎问题
https://www.zhihu.com/question/37055015/answer/70201431
2.C2000编译器
https://www.ti.com/tool/download/C2000-CGT-18