杂记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

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

相关文章
|
网络协议 算法 Java
万字长文 | 保姆级的后台服务器开发C++学习路线
这一篇的主题是「Linux C/C++ 服务器/后台开发学习路线」
|
2月前
|
安全 网络协议 网络安全
动动手指,给你的网络免费装把“锁”
大家好,我是网络安全小达人,今天教你如何在网上申请免费的SSL安全证书。首先选择可靠的证书颁发机构,如JoySSL,注册账号并获取免费证书。接着选择证书并下单,验证域名所有权,生成证书签名请求(CSR),提交CSR并等待审核,安装SSL证书,最后测试证书是否正确安装。按此步骤操作,轻松提升网站安全性!
|
8月前
|
存储 编译器 程序员
|
8月前
|
存储 缓存 算法
|
8月前
|
C语言
(保姆级)函数基本内容
(保姆级)函数基本内容
56 5
|
JavaScript 前端开发 API
进来就之后,你的this将不再“瞎指”!
进来就之后,你的this将不再“瞎指”!
95 0
进来就之后,你的this将不再“瞎指”!
|
前端开发 Java Spring
JAVA一般指WEB服务器开发,是技术管理必须熟悉的
JAVA一般指WEB服务器开发,是技术管理必须熟悉的
79 0
|
设计模式
知识关联杂谈
最近越来越感受到不同学科的关联性越来越强。 作为一名技术人员,不仅仅要学习技术,如果能够了解逻辑学,甚至心理学、写作等相关性技能,又能过反向促进技术提升。
119 0
|
SQL NoSQL 关系型数据库
|
网络安全 API

热门文章

最新文章