2. C语言讲解——笔记

 一、数据类型分类:

基本数据类型:(内置:编译器自带的类型)int, short long, long long ,char ,float, double

符合数据类型:(多个内置类型组成的新类型)数组,struct, union, enum

二、 定义变量(注意事项:编码规范)

1、变量的可读性:形容词_名词         int n; int sum_result; (英文命名)

2、循环变量: int i; int k;

三、基本数据类型需掌握的知识点

1、各种数据类型的字节长度

(变量占用内存的大小,字节) int sum=5;

注意:计算机表示的内存大小的单位:

8bit位1个字节
16bit2个字节半字
32bit4个字节

 1024kB=1MB; 1024MB=1G; 1024G=1T;

sizeof: 计算数据类型和变量的内存大小(sizeof是一个运算符

比特位:计算机所能描述的计算最小单位

字节: 计算机内存分配的最小单位

 测量所有基本数据类型的字节长度:

 //测量所有基本数据类型的字节长度
    // sizeof默认输出无符号的长整型 unsigned long 所有数据类型改为%ld

    printf("int = %ld\n",sizeof(int));   //
    printf("short = %ld\n",sizeof(short));
    printf("long = %ld\n",sizeof(long));
    printf("char = %ld\n",sizeof(char));
    printf("float = %ld\n",sizeof(float));
    printf("double = %ld\n",sizeof(double));

输出结果:

char:

2^4=16         2^5=32         2^6=64         2^7=128

2^8=256         2^9=512         2^10=1024

 如何测量数据类型的大小?

         sizeof 运算符; sizeof(变量名) sizeof(数据类型)

        strlen 统计字符串中的字符的个数; 其作用为计算字符串的长度,但是不包括“\0”在内。

 2、各种数据类型的取值范围:

        计算机是以补码形式保存数据,为了解决+0,-0问题。

***计算机中保存的是一个数的补码

        原码,反码,补码之间的关系:

正数负数
原码 = 补码原码 = 补码取反 + 1
补码 = 原码取反 + 1(符号位不参与取反,参与计算
  • unsigned char : 1字节 = 8bit        (0,255)

        无符号的字符型数据,因为有8位,所以最低取0,最高取2^8-1=255;范围为(0,255)。

  • signed char : 1字节 = 8bit                (-128,127)

        有符号的字符型数据,因为最左面的一位为符号位,

        整数最大值        0111 1111 = 2^7-1=127

        负数最小值        1000 0000= >取反=>1111 1111=>加1=>1000 0000=-2^7=-128(符号位参与计算,不参与取反)             

1、计算机为什么提出补码?因为存在正零和负零 ;+0 -0

0000 0000 = +0

1000 0000 = -0

2、printf("%d\n",~2);                结果:3

                0000 0010

按位取反计算机得到的是补码   1111 1101        为负数       

                         (“~”按位取反,包括符号位,全部取反 )

取反加一得到负数的原码(符号位参与计算,不参与取反):

                                                  1000 0010=>加1=>1000 0011=>3

例题1:

char ch = -128;

ch = ch-1;

求ch:

-1的补码=>1000 0001=>取反=>1111 1110=>加1=>1111 1111

-128的补码=>1000 0000=>取反=>1111 1111=>加1=>1000 0000

 -128+(-1)=1000 0000 + 1111 1111=(1)0111 1111=127

例题2:

char ch = 127;

ch = ch+1;//出现溢出问题,因为计算+1后 ,将ch的值回写到内存

求ch:

127的补码=>0111 1111

1的补码=>0000 0001

127+1=>0111 1111 + 0000 0001=>1000 0000=-128

 例题2:

char ch = 127;

//ch = ch+1;

printf("ch = %d \n",ch+1);//不会出现溢出问题,因为直接将ch的值输出,并未回写到内存

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值