杂记3(指各种知识)

简介: 杂记3(指各种知识)

char的取值范围

char分为signed char 和 unsigned char 两种类型

先说signed char(即char)的取值范围,什么是signed char呢?即有符号的char

我们知道一个char在内存中占据一个字节,即八个比特位。用二进制表示char的取值范围就是00000000--11111111。那么你是否认为signed char的类型就是0--255呢?

如果你这样认为那么你就错辣!实际上,signed char的取值范围是-128--127。

为什么会这样呢?

所谓有符合数,就是指他的码的最低位(最左侧位)会被当作符号位,不进行计算。

举个例子,像是10000010,因为它是有符号数,最左侧的1会被当作符号位,表示负且不计算值的大小(如果是0则表示正),

因此10000010表示-2而不是130。最低位是否被当作符号位,这就是有符号数和无符号数之间的显著差别。

signed char 00000000至01111111表示0--127

10000000至11111111表示-127-0

等等,这样的话signed char的范围不就是-127--127了吗?!

笔者查了查资料,解释如下:

在signed char中,0有两种表示方式即00000000和10000000(这样的话只能表示-127--127这255个数字)。而signed char有8个比特位,可以表示256个数字,因此C语音规定(乌龟的屁股!)10000000表示-128。

signed char的取值范围分析完毕,而后再说unsigned char即无符号字符

前面已经提到,有符合型和无符号型间的显著区别就是最低位(最左侧位)是否被当作符号位。

unsigned char的取值范围同样也是00000000--11111111。这次就可以肆无忌惮地计算了,它的每一位都要参与计算,无需关心符号位的问题了。因此unsigned char的取值范围是0--255.

关于二维数组

有监控窗口可知,

arr[0]代表了第一行的所有元素,是int[4]类型(但它又是首元素地址)

arr[0]代表了第二行的所有元素,是int[4]类型

arr[0]代表了第三行的所有元素,是int[4]类型

arr+0代表了第一行首元素地址,是int[4]*

arr+1代表了第二行首元素地址,是int[4]*

arr+2代表了第三行首元素地址,是int[4]*

arr[0]+1 这个1,加的是int 类型大小

关于联合体

用Union判断机器的大小端

 
union s
{
    char a;
    int b;
};
int main()
{
    union s s1;
    s1.b = 1;
    if (s1.a == 1)
        printf("小端\n");
    else
        printf("大端\n");
    return 0;
}

1的十六进制序列

高位-->低位

0x 00 00 00 01

1在内存种的存储

地址:低地址-->高地址

小端 01 00 00 00

大端 00 00 00 01

Union的大小计算

 
union s
{
    char a[9];
    int b;
}s1;
int main()
{
    printf("%d", sizeof(s1));
}

输出的结果是:12

如何计算的?

  1. union的大小不小于成员大小的最大值
  2. union的大小必须是最大对齐数的整数倍

以上题为例,成员最大大小是9个字节,最大对齐数是4.因此union的大小是12.

union嵌套union的大小

 
union k
{
    char a[17];//17 1/8
    double b;//8 8/8 
};
union s
{
    char a[9];//9 1/8
    union k s2;//24 8/8
    int b;///4 4/8
}s1;
int main()
{
    printf("%d", sizeof(s1));
}

输出结果是: 24

由于共用体所有成员是共用一块空间的,因此计算共用体的大小只用找到最大成员的大小,并确保它是最大对齐数(包括嵌套联合体成员的对齐数)的整数倍就可以了。

相关文章
|
测试技术 Linux
Linux(8)Debain系统测试EC25-EUX模块usbnet0(qmi qcm)问题点
Linux(8)Debain系统测试EC25-EUX模块usbnet0(qmi qcm)问题点
504 0
|
11月前
|
存储 编译器 C语言
【C语言】指针大小知多少 ?一场探寻C语言深处的冒险 !
在C语言中,指针的大小(即指针变量占用的内存大小)是由计算机的体系结构(例如32位还是64位)和编译器决定的。
1313 9
|
7月前
|
Cloud Native 关系型数据库 MySQL
华鼎冷链科技 × 阿里云瑶池数据库,打造全链路协同的智慧冷链新标杆
从 PolarDB 的高性能数据库服务到 AnalyticDB 的强大数据分析,阿里云提供的丰富产品矩阵为华鼎冷链科技构建了全面的解决方案,推动华鼎冷链科技从成本中心向效率中心转型。
|
9月前
|
机器学习/深度学习 人工智能 自然语言处理
《解锁自监督学习:元应用数据标注难题》
在元应用开发中,数据标注是构建强大模型的基石,但传统监督学习面临高昂成本和人为误差等挑战。自监督学习通过挖掘数据内在信息、设计前置任务(如图像旋转预测、掩码语言模型),打破对人工标注的依赖,提升模型泛化能力。结合数据增强技术和半监督学习,利用少量标注与大量未标注数据,进一步优化模型性能。多模态自监督学习则融合文本、图像、音频等多源数据,减少单一模态标注需求。这些创新策略为元应用开发提供了高效解决方案,推动智能数字体验的发展。
196 1
|
编译器 C语言
C语言中的浮点数:深入探索与应用
C语言中的浮点数:深入探索与应用
2246 1
|
编解码 算法 vr&ar
深度剖析FFmpeg视频解码后的帧处理到Qt显示 从AVFrame到QImage的转换(二)
深度剖析FFmpeg视频解码后的帧处理到Qt显示 从AVFrame到QImage的转换
618 1
|
JavaScript 编译器 数据安全/隐私保护
TypeScript :关键字
本文介绍了 TypeScript 中的一些核心类型和工具类型,包括 `interface` 和 `type` 的基本使用和区别,以及一些高级类型如 `keyof`、`Record`、`Pick`、`Partial`、`Readonly` 和 `Omit` 的使用方法。文章还详细解释了 `namespace` 的作用和使用场景,帮助开发者更好地组织和管理代码,避免命名冲突,并提高代码的可维护性和可读性。
226 1
|
机器学习/深度学习 存储 Linux
linux中强大且常用命令:find、xargs、grep
linux中强大且常用命令:find、xargs、grep
914 9
|
存储 缓存 IDE
深度探索Linux操作系统 —— 构建initramfs
深度探索Linux操作系统 —— 构建initramfs
1139 5
|
存储 关系型数据库 Serverless
PolarDB产品使用问题之要获取并解析Binlog,该如何操作
PolarDB产品使用合集涵盖了从创建与管理、数据管理、性能优化与诊断、安全与合规到生态与集成、运维与支持等全方位的功能和服务,旨在帮助企业轻松构建高可用、高性能且易于管理的数据库环境,满足不同业务场景的需求。用户可以通过阿里云控制台、API、SDK等方式便捷地使用这些功能,实现数据库的高效运维与持续优化。
226 0