当前位置: 首页 > ops >正文

数据类型(基本类型)day2

三:数据类型在这里插入图片描述

一:分类

1.整形:整数 浮点型:小数 字符型:处理符号数据"TOM"

2.常量形式:在程序运行过程中,其值不能被改变的量称为常量 变量形式:在程序运行过程中,其值能被改变的量称为常量

二:整型

1.常量:123//十进制 0x123//十六进制 0123//八进制

​ //八进制<=>二进制----(一位八进制数对应三位二进制数)8421BCD码 //十进制转二进制—辗转相除法(高位下,低位上) //十六进制<=>二进制—(一位十六进制数对应四位二进制数) 8421BCD码

2.变量:整形int4字节 short短整型2字节 long长整型8字节 long long长长整型8字节 本质开了一块内存空间

signed/unsigned //有符号和无符号 八种 //不能用在浮点型 可用在整型和字符型

//不能数字开头 区分大小写 不能和二级关键词及系统函数重名 不能和C语言关键字重名

3.sizeof(xxx) 看对应xxx的大小,intint的内存大小 ,a就a所占的大小

4.字节序问题:0x12345678----小端—高高低低(高位数据放在高地址处) //高地址处指地址的名字大—eg:0x1004比0x1001大,所以0x1004是高地址处 高位数据–eg:0x12345678,在其中12是高位数据,78是低位数据

​ 大端(51单片机,ARM系列{默认小端可设置大端}等)—高低高低(高位数据放在低地址处)

5.整形的具体存储方式

int a = 123; 规则:整形数据—补码的方式存储

​ 正整数:原码,补码,反码的值都是一样的

​ 负整数:补码,反码 + 1

​ 32位— 0000 0000 0000 0000 0000 0000 0000 0000 //数值位

​ 有符号(最高位充当符号位.其余位充当数值位)-32768------32767(-215–215-1)符号位0正1负

​ 32位— 0|000 0000 0000 0000 0000 0000 0000 0000

​ 无符号(都充当数值位)0~65535(2^16-1)

​ eg:-123

​ 原码:1|000 0000 0000 0000 0000 0000 0111 1011

​ 反码:1|111 1111 1111 1111 1111 1111 1000 0100 //符号位不变,其他位 按位取反

​ 补码:1|111 1111 1111 1111 1111 1111 1000 0101 //反码+1 //如果在对补码进行补码得出就是原码

​ f f f f f f 8 5

​ 如果出现 1|000 0000 0000 0000 0000 0000 0000 0000

​ //-2^31:特殊–规定,这个值的最高位即充当符号位也充当数值位

6.整形数据的溢出

​ 一个整型变量(int)只能容纳-32768 - 32767 范围内的数,无法表示大于 32767 或小于-32768 的数。遇到此情况就发生”溢出”。但运行时并不报错。 它好像汽车里程表一样, 达到最大值以后,又从最小值开始计数。

三:浮点型

1.科学计数法1.234e3/1.234E-3

2.float4字节 double8字节 long double

3.float 符号位|指数位|(8位)|尾数位(23位)

​ 0|000 0000 0| 000 0000 0000 0000 0000 0000

​ eg: step1:float f = 12.125; 整数部分:1100

​ 0.125 * 2 = 0.25 -----0 / 025 * 2 = 0.5 -----0 / 0.5 * 2 = 1.0--------1 小数部分:0.001(乘2取整法)

​ step2:1100.001 = 1.100001 * 2^3 //科学计数法形式(二进制)

​ step3:按照IEEE 754 标准格式存储

​ 符号位|指数位|(8位)|尾数位(23位)

​ 0|000 0000 0| 000 0000 0000 0000 0000 0000

​ 0 127+3 100001

​ 0 1000 0010 100001 0 0000 0000 0000 0000 //不足补零

​ 0100 0001 0100 0010 0000 0000 0000 0000

​ 4 1 4 2 0 0 0 0

4.double 符号位|指数位|(11位)|尾数位(52位)

​ 0| 1023 (2^(11-1)-1)|

5.浮点数的比较问题(精度不一致)

float f=0.9;
printf("sizeof(0.9) = %ld]n",sizeof(0.9));
if(f==0.9)//判断语句中 0.9被判断为double类型 不是float类型//主要原因是 0.9 用乘2取整法是循环的,float有23个尾数 而double有52个尾数 //所以f 和 0.9 相比, 0.9在系统识别势必f稍大一点的//if( f == 0.9f) 加上f就会让0.9强制位float类型
{
printf("yes\n");
}else
{
printfC"no\n");
}

解决:只用同一个数据类型,系统默认double

eg:123 整型常量默认识别为signed int 类型 123u为unsigned int 类型 也可以123uL unsigned long int

#include<stdio.h>
int main(int argc, const char *argv[])
{
#if 0 float f = -6.125;int *p = (int *)&f;printf("*p = %#x\n",*p);
#endifprintf("sizeof(0.9) = %ld\n",sizeof(0.9));printf("sizeof(0.9f) = %ld\n",sizeof(0.9f));printf("sizeof(0.9l) = %ld\n",sizeof(0.9l));printf("sizeof(0.9L) = %ld\n",sizeof(0.9L));printf("sizeof(123llu) = %ld\n",sizeof(123llu));return 0;
}

四:字符型

1.char ch //sizeof(ch) = 1;1字节

2.man ascii 0-32 不可见字符 数字字符 ‘0’~‘9’ 对应ASCII(48-57)

​ 大写字母A-Z 65-90 小写字母a-z 97-122 空格字符 ’ ’ 是32

3.字符 互转 数值型数字

	char ch1 = '3';printf("ch1 = %d\n",ch1 - '0');//打印数值数字char ch2 = 3;printf("ch2 = %c\n",ch2 + '0');//打印字符数字
http://www.xdnf.cn/news/9241.html

相关文章:

  • C-内存函数,动态内存
  • Qt布局连续添加控件
  • Web3怎么本地测试连接以太坊?
  • 封装文档核心知识点总结(通俗版)
  • 利用 MkDocs 和 GitHub 部署个人博客网页
  • LINUX安装运行jeelowcode后端项目(命令行)
  • 【运维自动化-标准运维】如何实现在不同步骤间传递参数
  • 人该怎样活着呢?54
  • 随机模拟专题:第一课
  • 5G网络切片技术:开启网络服务定制化新时代
  • SpringMVC注解、@Controller注解和@RestController注解的区别、@RequestMapper、@PathVariable
  • 制作一款打飞机游戏59:子弹生成
  • DeepSeek 赋能智能安防:从算法革新到场景落地的全解析
  • 4月报 | SeaTunnel支持TDengine的多表Sink功能
  • 机器学习算法-- K 近邻算法(KNN)
  • Linux 资源限制(进程级,用户级,系统级)
  • Debian 11 之使用hostapd与dnsmasq进行AP设置
  • 欧拉定理:若 gcd(a,n)=1,则 a^φ(n)≡1(mod n)。
  • 2025 吉林CCPC
  • 【数据结构】 时间复杂度
  • 浙大版《Python 程序设计》题目集6-3,6-4,6-5,6-6列表或元组的数字元素求和及其变式(递归解法)
  • 前端生成UUID
  • 5.27 打卡
  • 哪些技术要素决定了多媒体数字沙盘的呈现效果与用户体验?
  • Cursor 与DeepSeek的完美契合
  • 树莓派超全系列教程文档--(49)远程访问树莓派
  • 5.27 day 30
  • SQL计算列
  • 数据要素配置如何驱动城市经济韧性的多元模式
  • 【leetcode】209. 长度最小的子数组