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

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

相关文章
|
6月前
|
存储 编译器 程序员
|
6月前
|
存储 缓存 算法
|
6月前
|
API 数据格式
科普术语:接口
科普术语:接口
69 0
|
Java 程序员 数据安全/隐私保护
重温经典《Thinking in java》第四版之第六章 访问权限控制(三十八)
重温经典《Thinking in java》第四版之第六章 访问权限控制(三十八)
50 1
|
Java 程序员 数据安全/隐私保护
重温经典《Thinking in java》第四版之第六章 访问权限控制(三十六)
重温经典《Thinking in java》第四版之第六章 访问权限控制(三十六)
74 0
|
Java 数据安全/隐私保护
重温经典《Thinking in java》第四版之第六章 访问权限控制(三十七)
重温经典《Thinking in java》第四版之第六章 访问权限控制(三十七)
61 0
|
消息中间件 缓存 Java
volatile 关键字与计算机底层的一些杂谈
volatile 是 Java 并发编程中一个非常重要,也是面试常问的一个技术点,用起来很简单直接修饰在变量前面即可,但是我们真的懂这个关键字吗?它在 JVM 底层,甚至在 CPU 层面到底是如何发挥作用的?
|
存储 固态存储 芯片
【计算机追本溯源】「底层原理系列」 回归与本质,让本文带你认识什么是计算机软件系统(1)
【计算机追本溯源】「底层原理系列」 回归与本质,让本文带你认识什么是计算机软件系统(1)
186 0
【计算机追本溯源】「底层原理系列」 回归与本质,让本文带你认识什么是计算机软件系统(1)
|
JavaScript 前端开发 API
进来就之后,你的this将不再“瞎指”!
进来就之后,你的this将不再“瞎指”!
87 0
进来就之后,你的this将不再“瞎指”!
|
设计模式
知识关联杂谈
最近越来越感受到不同学科的关联性越来越强。 作为一名技术人员,不仅仅要学习技术,如果能够了解逻辑学,甚至心理学、写作等相关性技能,又能过反向促进技术提升。
115 0