嵌入式初学(三)C语言实战一

C语言 -数据类型

1、数据:数据类型、变量、常量

  • 字符型:char 1字节
  • 整型:int 4字节 最高位为符号位 unsigned int 所有位都是数据位
  • 短整型:short int(short) 2字节
  • 长整型:long int(long) 8字节
  • 浮点型:float 4字节
  • 双精度型:double
    8字节

数据类型的本质:通过所占内存大小来决定
sizeof()是一种内存容量度量函数,功能是返回一个变量或者类型的大小(以字节为单位);在 C 语言中,sizeof() 是一个判断数据类型或者表达式长度的运算符。
1 字节=8 bit
int 32位:无符号数:0 - 2^32-1
有符号数:-2^31 - 2^31-1
chart 8位:-128 - 127

类型转换-高位丢失

所有数据在计算机内存储的形式都是补码形式
1001 原码
1110 反码:符号位不参与取反
1111 补码:反码加一,符号为参与计算
正数原码,反码,补码都是本身

 1 #include<stdio.h>                                                           
  2 int main()
  3 {
    
    
  4     int a = 129;
  5     char b = a;
  6     print("b=%d\n",b);
  7 }
 运行结果为b=-127
int1000 0001129char1000 0001 补码
    1111 1110 反码
    1111 1111 原码 (-127

易错点 0的原码:1000 0000;0000 0000

1 #include<stdio.h>                                                           
2 int main()
3 {
    
    
4     int a = 128;
5     char b = a;
6     print("b=%d\n",b);
7 }
  结果:
jsetc@jsetc-virtual-machine:~/0123$ vim 1.c
jsetc@jsetc-virtual-machine:~/0123$ gcc 1.c
jsetc@jsetc-virtual-machine:~/0123$ ./a.out
b=-128
jsetc@jsetc-virtual-machine:~/0123$ 

int a :1000 0000
char b:1000 0000 补码
1111 1111 反码
人为规定0000 0000 原码 (-128)

char字符以acs表形式进行输出;
常用ACS值记录:

  • ‘A’-65
  • ‘a’-97
  • ‘0’-32

const

常量定义,由它修饰的变量不能进行修改
printf:

  • %d:十进制数据
  • %u:无符号十进制数据
  • %f:6位小数
  • %c:输出单个字符
  • %s:输出字符串

printf()

  2 int main()
  3 {
    
    
  4     char *str = "hello";
  5     printf("|%7s|\n",str);
  6     printf("|%-7s|\n",str);
  7     printf("|%.2s|\n",str);
  8     printf("|%7.2s|\n",str);
  9     printf("|%-7.2s|\n",str);
 10     printf("|%-2.7s|\n",str);
 11 
 12     double d =10.2;
 13     printf("|%f|\n",d);
 14     printf("|%-10.2f|\n",d);
 15 
 16     int a = 10;
 17     printf("|%d|\n",a);
 18     printf("|%5d|\n",a);
 19     printf("|%+5d|\n",a);
 20     printf("|-%-5d|\n",a);                                                  
 21     printf("|%-5d|\n",a);
 22 
 23     return 0;
 24 }
 结果:
 jsetc@jsetc-virtual-machine:~/0123$ ./a.out
|  hello|
|hello  |
|he|
|     he|
|he     |
|hello|
|10.200000|
|10.20     |
|10|
|   10|
|  +10|
|-10   |
|10   |

%-d:表示左对齐
%7.2d:表示占用7个字节,但只输出2个字节

scanf

:严格按照“ 输入格式”进行数据输入
数据暂时存放在缓冲区

1 #include<stdio.h>
  2 int main()
  3 {
    
    
  4     int a,b,c;
  5    // scanf("%d%d%d",&a,&b,&c);/*结果1
  6     scanf("%d%d%d\n",&a,&b,&c);/*结果2                                            
  7     printf("%d %d %d",a,b,c);
  8     return 0;
  9 }
结果112 13 14
12 13 14
结果212 13 14 312231
12 13 14
结果2所用scanf()语句需要再输入一个无效数字,按下回车。
将双引号中的\n挤出数据缓冲区域,才能完成输出

运算符

单目运算符,双目运算符,三目运算符
算术运算符:+ - * /
逻辑运算符:&& 、||、^ 、==、!
条件表达式:<表达式1>?<表达式2>:<表达式3>

赋值顺序:从右到左。
其他运算符:从左往右
逻辑运算具有短路作用:当左边条件一定满足或一定不满足的时候,不进行右边的运算。

逻辑运算符&&短路了++b的运算码片

扫描二维码关注公众号,回复: 12435894 查看本文章
  1 #include<stdio.h>
  2 int main()
  3 {
    
    
  4     int a=0;                                                               
  5     int b=0;
  6     int c=1;
  7     int d=0;
  8     d=a++&&++b||c++;
  9     printf("a=%d\n",a);
 10     printf("b=%d\n",b);
 11     printf("c=%d\n",c);
 12     printf("d=%d\n",d);
 13 }
结果
a=1
b=0
c=2
d=1

逻辑运算符||短路了c++的运算

 1 #include<stdio.h>
  2 int main()
  3 {
    
    
  4     int a=-1;                                                               
  5     int b=0;
  6     int c=1;
  7     int d=0;
  8     d=a++&&++b||c++;
  9     printf("a=%d\n",a);
 10     printf("b=%d\n",b);
 11     printf("c=%d\n",c);
 12     printf("d=%d\n",d);
 13 }
 结果
a=0
b=1
c=1
d=1

猜你喜欢

转载自blog.csdn.net/weixin_45998055/article/details/113173730