C语⾔数据类型和变量
2 C语⾔数据类型和变量
1 数据类型介绍

1.1字符型char,整形int,浮点型等等
说明:这些类型的数据最终都是以补码的形式存储在内存中,原码-反码-补码的计算,对于正数和无符号数来说,它的原反补码是一样的,对于负数的计算过程如下:
-
计算负数的补码:把负数取绝对值,把绝对值的二进制即源码写出来要加上符号位
-
然后全部取反再加1即可(符号位也要取反)。
-
例子: 计算
-5的补码补码规则:负数的补码 = 其绝对值的原码取反(符号位也要) + 1
步骤:
-
取
+5的原码:0000 0101 -
按位取反(所有
0→1,1→0):1111 1010 -
加 1
1111 1010 + 0000 0001 ---------- 1111 1011最终补码:
1111 1011 0xFB//16进制char //character,一个字节(8个比特)大小,表示数据范围为-128~127,默认就是有符号的即比特位的最高位表示符号,0-正数,1-负数, [signed] char //有符号的 unsigned char //⽆符号的 1.2 整型 //短整型 short [int]//16个比特位表示数据的大小 [signed] short [int] unsigned short [int] //整型 int [signed] int//32个比特位4个字节 unsigned int //⻓整型 long [int] [signed] long [int]//64个比特位8个字节 unsigned long [int] //更⻓的整型 //C99中引⼊ //浮点型 都是有符号的 float //4个字节有符号 double //8 个字节有符号 long double2bool类型
C?语⾔原来并没有为布尔值单独设置⼀个类型,⽽是使⽤整数 0 表⽰假,⾮零值表⽰真。 在 C99 中也引⼊了 布尔类型 ,是专⻔表⽰真假的。
布尔类型的使⽤得包含头⽂件" <stdbool.h>" 布尔类型变量的取值是: true 或者 false
#define bool _Bool #define false 0 #define true 13 sizeof 操作符
sizeof 是⼀个关键字,也是操作符,专⻔是⽤来计算sizeof的操作符数的类型⻓度的,单位是字 节。 sizeof 操作符的操作数可以是类型,也可是变量或者表达式。
sizeof( 类型 )//类型的花一定要加括号 sizeof 表达式 //可以不用加括号,所以不是函数,函数一定要加括号 #include <stdio.h> int main() { int a = 10; printf("%zd\n", sizeof(a)); printf("%zd\n", sizeof a); //a是变量的名字,可以省略掉sizeof后边的() printf("%zd\n", sizeof(int)); printf("%zd\n", sizeof(3 + 3.5)); return 0; }sizeof 的操作数如果不是类型,是表达式的时候,可以省略掉后边的括号的。 sizeof 后边的表达式是不真实参与运算的,根据表达式的类型来得出⼤⼩。 sizeof 的计算结果是 size_t 类型的。
sizeof 在代码进⾏编译的时候,就根据表达式的类型确定了,类型的常⽤,⽽表达式的执⾏却要在 程序运⾏期间才能执⾏,在编译期间已经将sizeof处理掉了,所以在运⾏期间就不会执⾏表达式了。
4符号问题和数据取值问题
-
注意,C语⾔规定 char 类型默认是否带有正负号,由当前系统决定。这就是说, char 不等同于 signed char ,它有可能是 signed char ,也有可能是unsigned char 。这⼀点与 int 不同, int 就是等同于 signed int 。
上述的数据类型很多,尤其数整型类型就有short、int、long、longlong四种,为什么呢?? 其实每⼀种数据类型有⾃⼰的取值范围,也就是存储的数值的最⼤值和最⼩值的区间,有了丰富的类 型,我们就可以在适当的场景下去选择适合的类型。如果要查看当前系统上不同数据类型的极限值: limits.h ⽂件中说明了整型类型的取值范围。float.h 这个头⽂件中说明浮点型类型的取值范围。 为了代码的可移植性,需要知道某种整数类型的极限值时,应该尽量使⽤这些常量。
• SCHAR_MAX :signed char的最⼩值和最⼤值。 • SHRT_MAX :short的最⼩值和最⼤值。 • INT_MAX :int的最⼩值和最⼤值。 • LONG_MAX :long的最⼩值和最⼤值。 • LLONG_MAX :longlong的最⼩值和最⼤值。 • UCHAR_MAX :unsigned char的最⼤值。 • USHRT_MAX :unsigned short的最⼤值。 • UINT_MAX :unsigned int的最⼤值。 • ULONG_MAX :unsigned long的最⼤值。 • ULLONG_MAX :unsigned long long的最⼤值。5变量的创建和分类
5.1变量名称的问题
/数据类型 变量名(即这个变量的地址,将来编译的时候变量名称都会变成地址,所以同一作用域不允许使用相同的变量名称)
了解清楚了类型,我们使⽤类型做什么呢?类型是⽤来创建变量的。什么是变量呢?C语⾔中把经常变化的值称为变量,不变的值称为常量。变量创建的语法形式是这样的:
data_type name; | | | | //数据类型 变量名(即这个变量的地址,将来编译的时候变量名称都会变成地址,所以同一作用域不允许使用相同的变量名称) int age; //整型变量 char ch; //字符变量 double weight; //浮点型变量 //变量在创建的时候就给⼀个初始值,就叫初始化。不初始化那么就是随机值 int age = 18; char ch = 'w'; double weight = 48.0; unsigned int height = 100;变量的分类:
全局变量:在⼤括号外部定义的变量就是全局变量 全局变量的使⽤范围更⼴,整个⼯程中想使⽤,都是有办法使⽤的。(extern 变量类型 变量名称) 局部变量:在⼤括号{ }也叫作用域内部定义的变量就是局部变量 局部变量的使⽤范围是⽐较局限,只能在⾃⼰所在的局部范围内使⽤的。
#include <stdio.h> int global = 2023; //全局变量,如果其它源文件想使用改变量,extern int global 声明一个外部变量 int main() { int local = 2018; //局部变量 printf("%d\n", local); printf("%d\n", global); return 0; } //如果局部和全局变量,名字相同呢? #include <stdio.h> int n = 1000; int main() { int n = 10; printf("%d\n" n); return 0; } //其实当局部变量和全局变量同名的时候,局部变量优先使⽤。5.2 extern关键字
-
声明外部变量,如果一个.c文件想使用另一个.c文件的中的全局变量或者函数,则可使用该关键字
-
一个.c文件的全局变量或者函数具有外部链接属性,通过extern即可链接使用,但是如果该全局变量或者函数被static修饰,则没有外部链接属性。
-
更多推荐

所有评论(0)