C语言(二)数据类型、数据存放流程

1、什么是CPU和RAM?

CPU(中央处理器):处理器,用来计算数据。RAM(随机存取存储器):内存,用来存储数据

日常中所说的“32GB”的B指的是byte(字节),1byte=8bit(位)

CPU与RAM中有三条总线:

1.地址总线:

  • 有几位就有多少条地址总线,32位有32条总线;64位有64条总线。
  • 每根线只有两种状态:0和1,如果想要访问编号0,那么32根线上都是0;如果要访问3,那么后两根线是11(二进制)。相当于通过地址总线来选择要访问的内存到底用的是哪个格子的
  • 排列下来有2^32次方个,2^32/1024/1024/1024最大寻址空间有4G
  • CPU是64位,可以运行64位或32位软件(有一半是空的);但是32位CPU不能运行64位软件(存在RAM中)

2.数据总线

3.控制总线

1.1 关于变量存放的方法:

定义的变量会在RAM内存空间中给出一部分空间用来存放数据,如果变量大小写名不一样,代表着两个不同的内存空间,变量之所以可以改变数值是因为有内存空间。

 2 、数据类型

2.1 大小端

在学习数据类型之前需要弄清数据的存储方式,是如何存储到内存当中的。

数据存储有两种方式:大端和小端

  1. 大端序(Big Endian):最高有效字节存储在最低的内存地址,而最低有效字节存储在最高的内存地址。

  2. 小端序(Little Endian):最低有效字节存储在最低的内存地址,而最高有效字节存储在最高的内存地址。

假设有一个16位整数:0x12345678。

在大端中,存储的顺序为:0x12 0x34 0x56 0x78

在小端中,存储的顺序为:0x78 0x56 0x34 0x12

2.2 整型数据

2.2.1 整型常量

整型常量有三种表示方法

  1. 十进制数:123、-324、5

  2. 八进制数:最大数值是7且都以0开头的数,0123表示八进制数123;1234567

  3. 十六进制数:开头加0x(0X),比如0x123代表十六进制123;123456789ABCDEF

2.2.2 整型变量表示方法

整型类型:(8个):short 、int 、long (int) 、long long (int) 、(unsigned/signed(默认))

int型存放数据方式

有符号位

无符号位

最大

2的31次方-1

2的32次方-1

最小

-2的31次方

0

2.2.3 整型变量存放数据原理

  1. int n=100

    1. 0x00000064

    2. 0000 0000 0000 0000 0000 0000 0110 0100

    3. 00 00 00 64

  2. int n=-100:原码-反码-补码,符号位由最高位决定,0代表正,1代表负,其最根本原因如下:

    1. 0x00000064

    2. 将100表示为8位的二进制:0000 0000 0000 0000 0000 0000 0110 0100

    3. 计算其补码,即取反并加1:

      1. 取反:1111 1111 1111 1111 1111 1111 1001 1011

      2. 加1: 1111 1111 1111 1111 1111 1111 1001 1100

    4. FF FF FF 9C

注意:当用printf打印的时候,%d表示有符号十进制打印,要注意需要打印的是几进制数,必要需要进行进制转换(原码反码补码的操作)

2.3 浮点型

2.3.1 浮点常量表示方法:

1. 十进制小数:1.2、0.12、123.0

2. 指数形式:123e3表示123×10^3

2.3.2 浮点变量表示方法:

1. double(双精度浮点型)8个字节

2. float(单精度浮点型)4个字节

在对两个数据做比较时,要注意变量类型要一致

比如

float a=0.9;
if(a==0.9)
{
printf("yes");
}

else printf("no");

输出no,应当改成if(a==0.9f),具体原因可以查看sizeof(0.9)的大小和sizeof(a)的大小

2.3.3 浮点变量存储数据原理:

三步:符号位、阶码、尾数

 

2.4 字符型

1.char

  • 1字节(8bit),最高位符号位
  • 使用' '引用
  • " " const char* 打印的地址,要注意

2.unsigned char:1字节(8bit),无符号位

3、Printf

3.1 打印格式指示符

printf函数中的格式化字符串中可以使用不同的格式指示符(format specifiers)来指定要打印的变量的类型和格式

  1. 整数类型:

    1. %d:有符号十进制整数(常用)

    2. %ld:long long int型

    3. %u:无符号十进制整数

    4. %o:无符号八进制整数

    5. %x:无符号十六进制整数(小写字母)

    6. %X:无符号十六进制整数(大写字母)

  2. 浮点数类型:

    1. %f:浮点数(小数)(常用)

    2. %e:以指数形式表示的浮点数(小写字母)

    3. %E:以指数形式表示的浮点数(大写字母)

  3. 字符类型:

    1. % c:字符char

    2. %s:字 符串

  4. 指针类型:

%p:指针地址

3.2 转义字符

在printf打印中使用

3.3 小数截断

用整型打印浮点型,将小数截断,只打印整数部分

3.4 高位截断

使用短字节打印长字节,需要将高位截断,打印低位数据:用short 打印int


short s;
char z;
int i = 0x12345678;
s = i;
z = i
printf("%d \n ", s);
printf("%d \n ", z);

输出:
22136(0x5678)
120 (0x78)

3.5 符号位扩展(前提类型是有符号)

使用长字节打印短字节,补齐高位,由最高位决定所补是0还是1,如果补0代表正数,如果补1代表负数,进行补码:用int 打印short

short s;
char z;
int i = 0x12345678;
s = i;
z = i
printf("%d \n ", s);
printf("%d \n ", z);

输出:
22136(0x5678)
120 (0x78)

4、运算符

%求余运算符

数据类型必须是整型或者兼容整型

分母不能为0

符号与左操作数有关,与右操作数无关

i++:先用再加。++i:先加再用。

三目运算符 ? :

布尔表达式?表达式1:表达式2

运算过程:如果布尔表达式的值为 true ,则返回 表达式1 的值,否则返回 表达式2 的值

5、关键字

define 声明变量赋值

#define one 100

const :

用于声明常量,表示变量的值不能被修改。const关键字可以用于声明常量指针,也可以用于函数参数,以确保函数不会修改参数的值。

const int i=100;

continue:

用于终止当前循环的迭代,转而执行下一次迭代。在循环中,continue会跳过本次循环体内剩余的代码,直接进行下一次迭代。

default:

在switch语句中用于标记默认情况。当switch的表达式的值与所有case都不匹配时,执行default后面的语句。

do:

用于创建一个do-while循环。do-while循环至少会执行一次循环体,然后根据while后面的条件判断是否继续执行。

enum:

用于创建枚举类型。枚举类型是一种用户定义的数据类型,用于定义一组命名的整数常量。

extern:

用于声明外部变量或函数,通常在一个文件中定义,在另一个文件中使用。extern关键字告诉编译器变量或函数是在其他文件中定义的。

static:

用于声明静态变量,使变量在整个程序执行期间保持存在。静态变量在函数调用之间保持它们的值。

struct:

用于定义结构体类型。结构体是一种用户定义的数据类型,用于组合不同类型的数据成员。

typedef:

用于为数据类型定义新的名称。typedef可以增强代码的可读性,并提供一种将数据类型命名为更具意义的名字的方式。

union:

用于定义联合类型。联合是一种数据结构,允许在相同的内存位置存储不同的数据类型。

volatile:

用于告诉编译器该变量的值可能会在未明确要求时被修改,因此编译器不应该进行优化。volatile关键字通常用于与硬件相关的变量,如硬件寄存器。

6、赋值(左值右值)

左值(lvalue)

  • 左值是一个表达式或标识符,它指向内存中的位置,这个位置可以被修改。换句话说,左值是可寻址的。
  • 左值可以出现在赋值语句的左边,因为它们代表着一个可以被赋值的位置。

右值(rvalue)

  • 右值是一个表达式,它代表一个临时的、无法被修改的值,不可寻址。
  • 右值不能出现在赋值语句的左边。

7、各类数值型数据间混合运算

运算结果类型由低级别向高级别转换

int i=100;
float j=1.23;
printf("%f \n", i+j);
输出:101.23

printf("%f \n", 3/5 +4.3);


输出:4.3

  • 13
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Zhaorming.

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值