嵌入式学习一阶段——C语言:数据类型

一:c语言几大常见数据类型

1.基本类型

char:字符型,一般为1byte        8个字节 

范围:有符号:-128~127,无符号:0~255

short:一般为2byte        16个字节

int :整型,一般为4byte         32个字节

long:长整型,一般为8byte         64个字节

float:单精度浮点数,一般为4byte        32个字节

double:双精度浮点数,一般为8byte        64个字节

long double:长双精度浮点数

在C语言中,数字默认是int类型,小数默认是double类型

2.枚举类型

(1)枚举类型(enum)。枚举类型就只有枚举类型(enum)。

3.空类型

(1)空类型(void类型)。空类型就只有空类型(void)。

 空类型,在C语言中可能出现在3个地方

        (1)void当函数的返回值类型,表示函数没有返回值

        void xxx(int a)

        {


        }

(2)void 当函数的阐述,表示该函数没有参数

void xxx(void)

{
}

(3)void * 表示通用指针

void * xxx(void)

{
}

4.派生类型

派生类型包含:指针类型(*)、数组类型([])、结构体类型(struct)、共用体类型(union)和函数类型

       

二:数据对象之变量

1.数据对象分为两类:

变量:在程序运行过程中,其值可以被改变的数据对象。

常量:在程序运行过程中,其值不可以被改变的数据对象。

2.变量的定义

变量在使用之前,需要定义。必须“先定义,后使用”

定义变量的语法:

变量的类型 变量名 ={初始化};{}是可选的。

--变量的类型:任何C语言合法的类型都可以

--变量名:(见名知其意)

“标识符”:在C语言的标准里,标识符必须由字母,下划线,数字组成,并且第一个字符必须是下划线和字母

左值:可写的变量的地址空间

右值:可读的变量的值

3整型变量在存储空间中的存储方式

 整数在计算机中是以二进制的补码形式存放的
补码:
    正数的补码就是其原码的本身

负数的补码: 其 绝对值的原码  取反 +1  

·整数在计算机中存放的形式的两个结论
    结论一:
        一个负数会和一个较大的正整数的补码形式相同

eg:32位中-1的补码形式和2的32次方-1的补码形式相同。
    结论二:
        在cpu底层中没有符号位的概念,都是数值位,都参与了运算,至于这个数是 正数还是负数,得看你的输出是有符号还是无符号!

数据类型例子

eg:
0000 1101 -->13
1000 1101--->-13
    ↓取反
1111 0010 +1 --->1111 0011 /* -13的补码(8bit)*/

8bit存放数字
-1和255
-1: 1000 0001--->(绝对值取反)1111 1110 +1 --->1111 1111
255:1111 1111


-2 254

-2:1000 0010 ---->(绝对值取反)1111 1101 +1 --->1111 1110
254:1111 1110

-3 253

-3:1000 0011 ---->(绝对值取反)1111 1100 +1 --->1111 1101
253:1111 1101


int 32bits
(1)分析程序输出结果
int a=-3;
printf("%d\n",a) ;//-3  
printf("%u\n",a) ;//2^32-3

3的二进制原码:0000 0000 0000 0000 0000 0000 0000 0011     -3的二进制原码:1000 0000 0000 0000 0000 0000 0000 0011-->绝对值取反 1111 1111 1111 1111 1111 1111 1111 1100
--->+1   -3的二进制补码:1111 1111 1111 1111 1111 1111 1111 1101(计算机上的存储方式)
%d --->输出有符号整数:-3;
%u--->输出无符号整数:2^32-3--->4294967293

(2)分析程序输出结果
unsigned int a=-4;
printf("%d\n",a) ;//-4  
printf("%u\n",a) ;//2^32-4

4的二进制原码:0000 0000 0000 0000 0000 0000 0000 0100     -4的二进制原码:1000 0000 0000 0000 0000 0000 0000 0100-->绝对值取反 1111 1111 1111 1111 1111 1111 1111 1011
--->+1   -4的二进制补码:1111 1111 1111 1111 1111 1111 1111 1100(计算机上的存储方式)
%d --->输出有符号整数:-4;
%u--->输出无符号整数:2^32-4--->4294967292

不同整型之间的赋值问题

eg:
32bit
unsigned char c=250; //char:11111010‬
char d;
d=c+8; //00000000 00000000 00000001 |00000010‬
printf("%d\n",d);//00000000 00000000 00000000 00000010‬ /*2*/
printf("%u\n",d);//00000000 00000000 00000000 00000010‬ /*2*/

250: 00000000 00000000 00000000 11111010‬

你可能感兴趣的:(c语言,学习)