64位 int 占几个字节_敢问一个字节有多长

一、功能介绍

C语言中字节长度的思考 C语言中不同类型数据所占字节数的思考C语言中s izeof关键字的介绍 二、问题分析

简单看下面一段代码,想一下输出应该是什么。

  char cVar = 0x0100;  int iVar = 0;  printf("cVar = %d\n", cVar);  printf("sizeof(int) = %d\n", sizeof(iVar));

这个问题不难,我的调试结果如下。

1354905bf9cd6ad22ba0e6c85eafcfc1.png

解释起来很容易,char型变量占1个字节,将两个字节大小的数值赋给它时产生了数据截断,即舍弃了高位数据0x01,所以cVar的值是0。一个int型数据占4个字节,所以sizeof(int)的值为4。

----  这是一条分割线  ----

今天在知乎上看到了下面这张图片。

c99b82f21fab3746483ffab8380a4a02.png

如果按照上面的分析,c3[0]的值应该是0x34,len1的值应该是4才对。知乎上的相关回答如下。

8ed2fe60d63afb65e6619bef479cd3ca.png

考虑16位字长的编译器中,char占1个字节,short占2字节,int占两字节,long占4字节。综合上面两位答主的表述,如果题主用的是16位字长的编译器,而且char型数据确实占了16位,那么一切就说的通了。

上面的答主说曾经在f2812中发现过这个现象,所以下载了c2000的编译器手册,简单看了看,关于数据类型长度的部分描述如下。

294a9f82b5f47963b056b272f6515c10.png

从编译器的手册中可以看出,char型数据果然占据了16位,因此 将0x1234赋给c3[0]并未发生数据截断。再往下看,关于sizeof的描述也和MSDN上相同,即返回一个对象或者类型所占的内存字节数。而在c2000的编译器中,一个字节的长度就是16位,因此sizeof(int)=1也就顺势成立了。

365e101e1d44505c1d64544180a989bf.png

三、总结

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值