C语言的数据

数据类型

1、计算机储存大小排序:
     位---->字节---->半字---->字
    8位=一个字节    一个半字=两个字节    一个字=四个字节
2、检查编译器分配给各个数据类型的大小方法:
     printf("%d",sizeof(int));

    sizeof用法注意事项:sizeof可以对变量有sizeof (num)的操作,也可以有类似sizeof num的操作;加括号不加括号都可以,而对数据类型进行操作是,必须要加括号来判别他的大小。


数据在内存中的放置

1、

如果我们定义:int num = 5;在内存中num就是以此方式存在的;&num的值为0x1000,这不同于第一个位的地址,
对如果对&num+1则加的是四个字节。


2、不同数据类型在vim中的大小:
 int 4字节    short 2字节    long 4字节    char 1字节    float 4字节    double 8字节
 指针的固定长度为4字节

strlen与sizeof的区别

    1>strlen不计算‘\0’,遇到‘\0’停止
    2>strlen为函数,sizeof为运算符

    char ptr[100] = "hello world";
    sizeof (ptr) = 100;

    char *ptr = "hello world";
    sizeof (ptr) = 4;

    char ptr[] = "hello world";
    sizeof (ptr) = 12;

数据类型取值范围

以char为例

有符号数:
1、当为正时,即符号位为0时:
     因为当正数时源码 = 补码,
     所以最大值在内存中的储存应为:0 1 1 1 1 1 1 1 = 2^7 - 1 = 127
     所以当有符号数为正数时都为取值范围为:0 ~ 127
2、当为负时,即符号位为1时
     负数的补码和源码之间的运算为:符号位不变,数据位取反加一;

所以:无符号为负数是的取值范围为:-128 ~ -1


综上:有符号输的取值范围为:-128 ~ 127


溢出问题:int unsigned i = 127;
                  int j = i - 1;
                  printf("%d",j);



如何提高有符号和无符号的代码移植性问题:

1、如果定义100个char a;因为不同编译器对char的出事定义不同(有的默认char,有的默认unsigned char),我们制作一个头文件typedef.h,内容为:typedef unsigned char Char;在源程序中引用该头文件,就不需要打unsigned char,同时提高代码的可移植性
2、当无符号数和有符号数进行比较时,有符号数自动转化为无符号数
比如:a =(-14)>6 ? 1 : 0;则结果为1,因为-14的符号位变成了有效数据位,比原来大(6默认为有符号)


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值