C-数据类型

C-数据类型,第1张

C语言–备忘

文章目录
  • C语言--备忘
  • 一、编程规范
  • 二、数据 *** 作
    • 1. 数据类型
    • 2. 占位符
    • 3. 运算符
      • 3.1 基本运算符 加'+' 减'-' 乘'*' 除'/' 余'%'
      • 3.2 赋值运算符 '='
      • 3.3 自增自减运算符 '++' '--'
      • 3.4 关系运算符 '==' '>=' '<=' '!='
      • 3.5 逻辑运算符:与'&&',或'||',非 '!'
      • 3.5 位运算符:与'&',或'|',非 '^',取反'~'
      • 3.6 移位运算符:'<<' '>>'
      • 3.7 地址运算符:取地址'&',解地址'*'
      • 3.8 三目运算符:取地址 '?'
      • 3.8 运算符优先级
    • 3. 类型转换
      • 3.1 隐式转换
      • 3.2 强制转换
    • 4. 编译过程
  • 总结


一、编程规范
  1. 源文件:以.c结尾,头文件:必须以.h结尾
  2. 头文件使用要点:
    #include <头文件.h>:告诉gcc,头文件位于/user/inlude 下面;
    #include “头文件.h”:告诉gcc,当前目录下找到头文件,若没有,再去/usr/include目录;
  3. main 函数前必须int,后面括号内可以写void, 也可以写 argc ,argv;
  4. main中的return让main函数执行到这停止运行。返回0,告诉运行正常。若有问题,非0;
  5. 熟练使用TAB按键;
二、数据 *** 作 1. 数据类型
  1. unsiged int 和 unsigned long 对于GCC编译器不一样;若是x64位,long是8字节,int依然是4字节;
  2. 字符变量存储数据本质为ASCII编码,char=‘A’,实际’A’为整数,本质分配1字节空间,分配ASCII码
关键字名称含义内存大小数字范围
char字符类型1Byte-128~127
unsigned char非负的单字节整数1Byte0~255
short双字节整数2Byte-2^15 ~ 2^15-1
unsigned short双字节整数2Byte0 ~ 2^16-1
int四字节整数4Byte-2^31 ~ 2^31 -1
unsigned int四字节整数4Byte0~2^32 -1
long四字节整数4Byte2^31 ~ 2^31 -1
unsigned long四字节整数4Byte0~2^32 -1
longlong八字节整数8Byte-2^63 ~ 2^63-1
float单精度浮点数4Byte
double双精度浮点数8Byte
2. 占位符
数据类型占位
char%c,%hhd [half half %d,十进制]
char%c,%hhd [half half %d,十进制]
insigned char%c,%hhd [half half %d,十进制]
short%hd
unsigned short%hu
int%d [4Byte]
unsigned int%u [4个字节]
long%ld
unsigned long%lu
float%f或者%g //前者保留多余的0,后者不保留,6位
double%lf或者%lg
3. 运算符 3.1 基本运算符 加’+’ 减’-’ 乘’*’ 除’/’ 余’%’
  1. A/B : 若AB均为整数,计算结果保留整数;
  2. A%B 和 A/B : B不能为 0 ,否则程序崩溃;
  3. 5%1.1 : 取余 *** 作,分母不能为浮点数,否则崩溃;
  4. A%B :结果的符号 与 A 保持一致;
3.2 赋值运算符 ‘=’
  1. A = B : A不能为常量或者表达式;
3.3 自增自减运算符 ‘++’ ‘–’
类型说明
前++针对变量的值+1,后计算表达式的值;
后++先计算表达式的值,后对变量的值+1;
前- -先对变量的值减1,后计算表达式的值
后- -先计算表达式的值,后对变量的值-1;
int a=1;
int b=0;
b=++a;//a先自加1为2,然后再赋值给b:a=2,b=2
b=a++;//b=2,a=3,解释:先执行赋值,a再自加1
printf("a=%d,b=%d\n",a,b)//a=2,b=3
3.4 关系运算符 ‘==’ ‘>=’ ‘<=’ ‘!=’
  1. 关系运算符的运算结果是整数:1(真),0(假)
3.5 逻辑运算符:与’&&‘,或’||',非 ‘!’
  1. C=表达式A&&表达式B,当且仅当A和B同时为真时,整个表达式才为真
  2. C=表达式A||表达式B,当A和B中有一个为真时,整个表达式才为真
  3. !表达式A,若A为真,表达式为假
    切记:短路运算
    A&&B,若A的值为假,则B不运算[0&&++b],++b 此条语句不会执行,b=1 ;
    A||B,若A为真,则B不运算[250||++b], ++b此条语句不会执行,b=1 ;
int a=1;
0||++a;
printf("a=%d\n",a);//a=2,必须路过后者;
int b=1;    
250||++b;
printf("b=%d\n",b);//b=1,自动忽略后者运算
3.5 位运算符:与’&‘,或’|‘,非 ‘^’,取反’~’

概念:位运算符,对内存中的二进制进行运算,C语言提供专门的运算符,简称位运算符

  1. 位与:C=A&B, 任何位与0做与运算,结果为0,任何数跟1做位与,保持原值
    一般用于将某个Bit位清0,并保持其他位置不变

  2. 位或:C=A|B, 任何位与1做或运算,结果为1,任何位置与0做运算,保持原值
    一般用于将某个bit位置至0,并保持其他位置不变

  3. 位异或:C=A^B:相同为0,不同为1
    语法:一般用于取反运算:

  4. 位反:C=~A( 默认int 类型,32位,4字节 )
    取反(~)运算符一般与位与(&)结合起来实现某个bit的清0 *** 作;

3.6 移位运算符:‘<<’ ‘>>’
  1. 左移动:A< 左移n位相当于乘以2的n次方

  2. 右移动:A>>B :将A右移动B个位置
    右移相当于除以2次方

#include 
int mian(void)
{
    int a= 0x5A;
    //将a变量的第3位置清0;
    a &= ~(1<<3);
    printf("a=%#x\n",a);
    //将a变量的4位置置1;
    a |=1<<4;
    //将变量的2、3位置置1;
    a |=(3<<2);
    printf("a=%#\n",a);
    return 0;
}
3.7 地址运算符:取地址’&‘,解地址’*’
  1. 计算机中地址由32位2进制数组成;
    取地址运算符 &:获取一个变量在内存对应的首地址;占位符%p用来显示地址信息;
    语法:&变量名
  2. 解运算符 * :根据变量的首地址获取内存中的数据或者根据首地址写入数据;
    用法:*地址,结果可以 *** 作内存;
int a= 250;
printf("a的首地址%p\n",&a);
printf("a的值为%d\n",*&a);
*&a=520;//根据a的地址找到a的内存,然后往内存写入520
3.8 三目运算符:取地址 ‘?’
  1. 整个表达式结果D=条件表达式A ?表达式B:表达式C;
    如果A为真,则D=B,否则D=C
  #include//ABS绝对值程序
  int main(void)
  {
      int a=0;
      printf("请输入一个数:")scanf("%d,&a");
      a= a>=0 ? a:0-a;//实现绝对值 *** 作
      printf("a的绝对值为%d\n",a); // a = 0
      return 0;                        
  }
3.8 运算符优先级

优先级:
1. 括号类最快;
2. 数学运算:加减乘除;
3. 数学运算:移位;
4. 真假判断:大于小于等于
5. 位 *** 作运算
6. 逻辑判断:与或非

3. 类型转换 3.1 隐式转换

概念:如果表达式中不同数字的数据类型不同,gcc编译器将不同数据类型转换成相同的数据类型后在计算

  1. 隐式转换过程中,自动将内存小的类型转换成占内存大的内省;
  2. 隐式转换过程中,既有整型数据类型,还有浮点数数类型,gcc自动将整型数据类型转换成浮点类型;
  3. 隐式转换过程中,既有无符号数据类型,还有有符号数据类型 ,gcc自动将有符号转换成无符号数据类型;
#include 
int main(void)
{
//数据类型有int和double,先转换为double,8字节
    printf("sizeof(1?1:0.9)的结果是%d\n",sizeof(1?1:0.9));
//结果为0,-7和3都为int 类型;
    printf("-7+3>0结果是%d\n",-7+3>0);
//结果为1,-7先转换为无符号;
    printf("-7+3u>0结果是%d\n",-7+3u>0);
    return 0;
}
3.2 强制转换

建议使用,提高代码的可读性:目标类型变量=(目标类型)源类型变量

char a= 90; int b=(int)a;// GCC强制将a转换成int 类型赋值给b
// 注意:强制转换可能造成数据的丢失:
char a=(char)300;//数据丢失了;
printf("a=%d\n",a); //a=44=300-128=172-128=44
  1. 注意:强制转换都是小转大,或者相等转
  2. 切记:不管那种类型转换,都不会修改变量本身的值
4. 编译过程
// 在ubuntu 环境 使用GCC 编译工具
// 一步法:
gcc -o type type.c   

// 三步法: 
//--1. 链接
gcc -E type.c type.i 
//--2. 编译
gcc -c -o type.o type.i 
//--3. 生成
gcc -o type type.o
总结

提示:这里对文章进行总结:

  1. 章节包含内容:数据类型,运算符,类型转换;

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1352567.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-14
下一篇 2022-06-14

发表评论

登录后才能评论

评论列表(0条)