翁恺 程序设计入门C语言笔记-数据类型

本文介绍了C语言的基础数据类型,包括整数(char, short, int, long, longlong), 浮点数(float, double, longdouble),逻辑类型(bool)以及指针和自定义类型。重点讲解了整数的范围、字符的特殊用途和类型转换规则,提醒读者注意浮点数的精度问题。
摘要由CSDN通过智能技术生成

参考翁恺 程序设计入门-C语言

开发环境

需要一个IDE,这里笔者选择Visual Studio Code,windows需要安装gcc(编译器),然后配置环境参考https://zhuanlan.zhihu.com/p/335707213

数据类型
  • 偏底层的语言是强数据类型的,就是严格区分数据类型并且会对其进行检查,比如C,C++,JAVA.上层语言不关注数据类型,他只要知道这是一个数,并不用关心数的范围大小和类型,如python.

  • 整数

    ​ char,short,int,long,longlong(c99)

  • 浮点数

    ​ float,double,longdouble(c99)

  • 逻辑

    ​ bool(c99)

  • 指针

  • 自定义类型

int a;
printf("sizeof(int)=%ld\n",sizeof(int));   //sizeof()可以显示一个变量的大小
  • int是用来表示计算机字长的单位,与计算机的字长和编译器有关,可能会随着电脑编译器版本的不同而不同。
    printf("sizeof(char)=%ld\n",sizeof(char));
    printf("sizeof(short)=%ld\n",sizeof(short));
    printf("sizeof(int)=%ld\n",sizeof(int));
    printf("sizeof(long)=%ld\n",sizeof(long));
    printf("sizeof(long long)=%ld\n",sizeof(long long));
    printf("sizeof(float)=%ld\n",sizeof(float));
    printf("sizeof(double)=%ld\n",sizeof(double));

输出结果

sizeof(char)=1
sizeof(short)=2
sizeof(int)=4
sizeof(long)=4
sizeof(long long)=8
sizeof(float)=4
sizeof(double)=8

1表示一个字节

  • 补码 在计算机中表示负数的二进制,因为-1 + 1=0补码的作用是将减法变成加法,所以在设定补码和原码相加为一个溢出的0 如1 原码 0000 0001 补码 1111 1111 这样相加就是1 0000 0000

  • 整数的范围

    char 1个字节的整数范围 (-128~127) 8个字节共能表示256个数,1111 1111 表示负数 -128

    short 两个字节(-32768~32767)

​ 1111 1111~ 1000 0000当类型为char,当作整数看待时他就是负数,而且是补码形式,1111 1111是-1的补码,所以他表示整数-1,1000 0000表示整数-128

    char a = 255;
    char b = 0b11111111;
    short c = 255;
    printf("%d,%d,%d\n",a,b,c);  

输出:

	-1,-1,255

3个数都是1111 1111 在1个字节的类型眼里,因为最高位就是第8位,所以是个负数,被看成是补码,在16个bit的short眼里,最高位是0,是个整数所以值不变,溢出的值是会出错的

unsigned char a =255;   \\将最高位不看作符号位,扩大了正数的范围,也有利于做移位
  • 整数的输出

    比 int 小的类型 “%d”

    比 int 大的类型 “%ld”

    unsigned “%u”

  • 浮点数

    • 科学记数法,小数
    double ff = 1E-10;
    printf("%E,%.16f\n",ff,ff);
    

    %e表示用科学计数法输出,f是浮点数输出,浮点数可以表示小数点后10个0加1,但是printf如果不去指定小数点后显示的个数一般显示不到第十位,所以要用 %.16指定显示到小数点后第十六位,指定位数的输出是四舍五入的。

    inf,超过范围的浮点数,±∞

    nan 不存在的浮点数

    浮点数是不精确的。

    float a,b,c;
    
    a = 1.345f;   //小数默认是double,要定义float类型就在后面加f
    b = 1.123f;
    c = a + b;
    if (c == 2.468)
        printf("相等\n");
    else
        printf("不想等! c=%.10f, 或%f\n"c,c);
    

    程序输出是 不相等! c=2.4679999352 或 2.468000

    这就说明浮点数相加产生的不是精确的值,所以判断两个浮点数相等不能用

    if (a == b);\\错误
    
    if (fabs(a - b) < 1e-12);   \\a-b小于1的负12次方
    

    所以在计算小数的时候不要用浮点数,将小数乘以10的若干倍变为整数再用整数计算

  • 字符

    char可以表示一个字节的整数也可以表示一个字符,字符用单引号。

    如 char c = ‘1’;等效于 char c = 49;
    c作为字符可以是他的字符’1’,做整数输入输出的时候就是他的ASCII码值

  • 逃逸字符

    字符意义字符意义
    \b回退一格"双引号本身
    \t到下一个表格位单引号
    \n换行\反斜杠本身

表格位的作用就是对齐不同长度的输出,如

printf("123\t456\n");
printf("1234\t456\n");

第一行46和第二行456会对齐。

  • 类型转换

    当运算符两边出现不一致的类型时,会自动转换成范围较大的类型。

    对于print,任何小于int的类型会被转换成int,folat的被转换成double,但是scanf不会

    强制类型转换:通常是转换为小的类型

    (int)10.2;

    (short)32;强制转换成小类型可能会出现溢出错误。它只是去生成一个新类型的变量,并不会改变原来的变量,如

    int i=32768;
    s = (short)i;
    

    i本身还是32768,只是s变为-1,因为溢出了。

    强制类型转换的优先级高于四则运算。

  • 逻辑运算

    !a 逻辑非 &&逻辑与 ||逻辑或 逻辑运算只有1和0作运算,逻辑与就是只有1与1为1

    如: x > 4 && x < 6; 表示x属于(4,6);

    优先级

    优先级运算符结合性
    1()从左到右
    2! + - ++ –从右到左
    3* / %从左到右
    4+ -从左到右
    5< <= > >=从左到右
    6== !=从左到右
    7&& (逻辑运算倒数第二)从左到右
    8||从左到右
    9= += -= *= /= (赋值最低)从右到左

    短路

    逻辑运算自左向右, &&如果左边是flase,就不会计算右边,如果 || 左边是ture就不会计算右边。当 a == 6 && b +=1; 时如果左边为flase,右边就不会只加。

    逗号

    逗号的优先级比所有的都弱,只比赋值高,主要用于for循环中

    i = 1+23+4;  \\由于逗号的优先级低于+,所以i=3,而3+4没有变量可以赋值
    i = (1+2,3+4);   \\作为一整个表达式,括号里有逗号值为最右边,i=7
    for (i=1,j=2;i<j;i++,j--)   \\主要用于for
        
    void function(int a,int b);   \\表示传入两个参数
    void function(int(a,b));   \\传入一个参数,逗号是运算符,真正的值是右边,b
    
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值