C语言的数据类型

C语言的数据类型
1 常量
在程序中是不可变的量,常量值不能修改
a 、定义一个宏常量 :
#define MAX 10 //定义一个宏常量,值为10
#define STRING "HelloWorld\n" \\定义了一个宏字符串常量
max = 100 ; 报错
注:宏常量名习惯为大写
b 、const 定义一个常量
const a = 10; //定义一个const常量,值为10
const char * str = "HelloWorld\n"
a = 100: 报错
注:变量为大小写
2 变量:
int i = 10 ;// 定义一个变量i,并赋值10, i值可以变

各进制,bit ,byte ,原码 ,反码,补码 的概念

1.1        二进制数、位、字节与字
我们习惯于十进制的数: 10 12
一个位只能表示 0 ,或者 1 两种状态 , 简称 bit ,一个位是一个 bit
一个 字节 8 个二进制,称为 8 , 简称 BYTE 8 个比特是一个字节
一个字为 2 个字节 , 简称 WORD
两个字为双字,简称 DWORD
1.2        八进制
八进制为以 8 为基数的数制系统, C 语言当中 0 表示八进制 ,0666;
1.3        十六进制
十六进制值 16 为基数 的数制系统, C 语言中用 0x 表示十六进制
十进制 十六进制 二进制
0 0 0000
1 1 0001
2 2 0010
3 3 0011
4 4 0100
   
 
 
十进制转化 8 进制,用十进制数作为被除数, 8 作为除数,取商数和余数,直到商数为 0 的时候,将余数倒过来就是转化后的结果
十进制转化 16 进制,用十进制数作为被除数, 16 作为除数,取商数和余数,直到商数为 0 的时候,将余数倒过来就是转化后的结果
 
 
1.4        原码
将最高位做为符号位( 0 代表正, 1 代表负),其余各位代表数值本身的绝对值
+7的原码是00000111
-7的原码是10000111
+0的原码是00000000
-0的原码是10000000
 
1.5        反码
一个数如果值为正,那么反码和原码相同
一个数如果为负,那么符号位为 1 ,其他各位与原码相反
+7的反码00000111
-7的反码11111000
-0的反码11111111
 
1.6        补码
原码和反码都不利于计算机的运算,如:原码表示的 7 -7 相加,还需要判断符号位。
正数:原码,反码补码都相同
负数:最高位为 1 ,其余各位原码取反,最后对整个数 + 1
-7的补码:=
10000111(原码)
111111000(反码)
11111001(补码)
+0的补码为00000000
-0的补码也是00000000
补码符号位不动,其他位求反,最后整个数 + 1 ,得到原码
用补码进行运算,减法可以通过加法实现
7-6=1
7的补码和-6的补码相加:00000111 + 11111010 = 100000001
进位舍弃后,剩下的00000001就是1的补码
-7+6 = -1
-7的补码和6的补码相加:11111001 + 00000110 = 11111111
11111111是-1的补码
 
1.7        sizeof 关键字
sizeof c 语言关键字,功能是求指定数据类型在内存中的大小,单位:字节
sizeof size_t 类型

1       int 类型
1.1.1           int 常量,变量
int 就是 32 位的一个二进制整数,在内存当中占据 4 个字节的空间
1.1.2           printf 输出 int
%d ,输出一个有符号的 10 进制整数, %u ,代表输出一个无符号的十进制整数
1.1.3           printf 输出八进制和十六进制
%x ,代表输出 16 进制数, %X ,用大写字母方式输出 16 进制数
%o 代表输出八进制数
1.1.4           short long long long unsigned int
short 意思为短整数,在 32 位系统下是 2 个字节, 16 个比特
long 意思为长整数,在 32 位的系统下, long 都是 4 个字节的,在 64 位系统下, windows 还是 4 个字节, unix 下成了 8 个字节。
Int 不管是 32 位系统下,还是 64 位系统下,不论是 windows 还是 unix 都是 4 个字节的
Long long 64 位,也就是 8 个字节大小的整数,对于 32 位操作系统, CPU 寄存器是 32 位,所以计算 longlong 类型的数据,效率很低
9l,9L,9ll,9LL,9u,9ull,9ULL
1.1.5           整数溢出
计算一个整数的时候超过整数能够容纳的最大单位后,整数会溢出,溢出的结果是高位舍弃。
当一个小的整数赋值给大的整数,符号位不会丢失,会继承
1.1.6           大端对齐与小端对齐
打印变量的内存地址:
int al = 0x12345678;
printf("%p\n", &al);

对于 arm intel 这种 x86 构架的复杂指令 CPU ,整数在内存中是倒着存放的,低地址放低位,高地址放高位,小端对齐。
但对于 unix 服务器的 CPU ,更多是采用大端对齐的方式存放整数

1.1        char 类型
1.1.1           char 常量,变量
char c ;定义一个 char 变量
‘a’,char 的常量
Char 的本质就是一个整数,一个只有 1 个字节大小的整数
1.1.2           printf 输出 char
%c 意思是输出一个字符,而不是一个整数
1.1.3           不可打印 char 转义符
\a, 警报
\b 退格
\n 换行
\r 回车
\t 制表符
\\ 斜杠
\’ 单引号
\” 双引号
\? 问号
1.1.4           char unsigned char
char a = 127;
a = a+5;
printf("%d",a) //结果为-124
解释:
a: 0111 1111
5: 0000 0101
a+5: 1000 0100 有符号位负数
负数在内存中存的是补码
补码:1000 0100
反码:1111 1011
原码:1111 1100 (第一个1 为符号位1 负数 111100 转为10进制为124)
所以结果为:-124

char 取值范围为 -128 127
unsigned char 0-255
1.2        浮点 float,double,long double 类型
1.2.1           浮点常量,变量
代码:
/*
浮点数类型:
*/
int fint = 5;
fint = fint / 2;
printf("fint/2=%d\n", fint); //结果为5 因为fint为整型, 不能保留小数点后面的位数

double f=5;
f = f / 2;
printf("f/2=%f\n", f);//输出结果为2.500000 浮点数 默认保留6个小数点位精度
printf("f/2=%.0f\n", f);//.0表示小数点后面精度,.0为保留整数,.1为保留一个小数点精度
printf("浮点数的长度:%d\n", sizeof(double));//输出结果为8 ,double类型数据占八个字节
// 小数计算的效率很低,能不用则不用
return 0;

Float 32 位系统下是 4 个字节, double 32 位系统下是 8 个字节
小数的效率很低,避免使用,除非明确的要计算一个小数。
 
1.2.2           printf 输出浮点数
 
%f,%Lf
%f 是输出一个 double
%lf 输出一个 long double

1.3        类型限定
1.3.1           const
const 是代表一个不能改变值的常量
1.3.2           volatile
代表变量是一个可能被 CPU 指令之外的地方改变的,编译器就不会针对这个变量去优化目标代码。
1.3.3           register
变量在 CPU 寄存器里面,而不是在内存里面。但 regist 是建议型的指令,而不是命令型的指令


1           字符串格式化输出和输入
1.1        字符串在计算机内部的存储方式
字符串是内存中一段连续的 char 空间,以 ’\0’ 结尾
“” C 语言表达字符串的方式
1.2        printf 函数, putchar 函数
printf格式字符
字符 对应数据类型 含义
d int 接受整数值并将它表示为有符号的十进制整数
hd Short int 短整数
hu Unsigned short int 无符号短整数
o unsigned int无符号8进制整数
u unsigned int无符号10进制整数
x / X unsigned int无符号16进制整数,x对应的是abcdef,X对应的是ABCDEF
ffloat或double 单精度浮点数或双精度浮点数
e / E double科学计数法表示的数,此处"e"的大小写代表在输出时用的“e”的大小写
c char字符型。可以把输入的数字按照ASCII码相应转换为对应的字符
s / S char * / wchar_t *字符串。输出字符串中的字符直至字符串中的空字符(字符串以'\0‘结尾,这个'\0'即空字符)
p void *以16进制形式输出指针
% % 输出一个百分号
printf 附加格式
字符 含义
l附加在d,u,x,o前面,表示长整数
- 左对齐
m(代表一个整数) 数据最小宽度
0将输出的前面补上0直到占满指定列宽为止不可以搭配使用-
N(代表一个整数) 宽度至少为n位不够以空格填充
 
Putchar 是显式一个字符的函数
 
1.3        scanf 函数与 getchar 函数
scanf 通过键盘读取用户输入,放入变量中,记得参数一定是变量的地址 (&)
int a = 0;
int b = 0;

scanf("%d", &a);//一定要用&取变量的地址
scanf("%d", &b);//一定要用&取变量的地址
 
Getchar 得到用户键盘输入的字符(包括回车)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

crystalnsd

万水千山总是情,支持一下行不行

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值