⭐️ 关键字深度剖析 ⭐️第三章(关键字sizeof\signed\unsigned&原反补\数据范围)(二)

简介: 本文主要讲解点关键字sizeof的理解关键字signed\unsigned的理解掌握原反补概念深刻理解数据的取值范围

大小端

CPU访存的基本单位是字节

对于数据在内存存储补码时的字节排列顺序是有差异的(对于不同编译器)

数据按照字节,是有高权值位低权值为之分的;内存按照字节是有高地址,低地址之别的

什么是大端小端

大端:指数据的低位保存在内存的高地址中,而数据的高(权)位,保存在内存的低地址中

小端:指数据的低位保存在内存的低地址中,而数据的高(权)位,保存在内存的高地址中

20210810092014401.png

为什么都是补码

使用补码,可以将符号位和数值域统一处理;

同时加法和减法也可以统一处理(CPU只有加法器)

此外补码与原码相互转换,其运算过程是相同的,不需要额外的硬件电路(上面已经提到)

深入理解变量内容的存入和取出

signed int b = -10; 
//存:先转成补码
//原:1000 0000 0000 1010
//反:1111 1111 1111 0101
//补:1111 1111 1111 0110
unsigned int d = -10; //(是否合法?) 可以,存入与变量是否有符号无关
//存(补码):1111 1111 1111 0110
//存:字面数据必须先转成补码,在放入空间当中
//所以,所谓符号位,完全看数据本身是否携带+-号,和变量是否有符号无关! 
//取:以什么样的形式读取(打印)例:%d(有符号整型打印)%u(无符号整形打印)
//取数据一定要先看读取类型,然后才决定要不要看最高符号位
//如果不需要,直接二进制转成十进制;如果需要,则需要转成原码,然后才能识别
//当然,最高符号位在哪里,又要明确大小端

整形取值范围

  • char为例
1. 
unsigned char: [0,2^8-1] 
2. signed char : [-2^7, 2^7-1] //char等价

特定数据类型,能表示的数据取值范围(范围由多个连续数据构成),本质是多位比特位形成的排列组合的的个数

  • 如何理解-128
对于char类型来说(8bite)
0000 0000(表示0)(二进制转十进制)
0000 0001(表示1)
...
0111 1111(表示127)
1000 0001(表示-1)
...
1111 1111(表示-127)
but
1000 0000该表示什么?-0吗?计算机不会浪费任何一个空间
对于-128
原:1 1000 0000
反:1 0111 1111
补:1 1000 0000
存入时发生截断(存)补码:1000 0000
补码转原码时(发生截断):0000 0000
对于这种情况,1000 0000定义成为-128
这是一种半计算半定义的方式!

总结规律

整数的取值范围(n表示类型占用多少bite)

无符号: [ 0 , 2 ^n - 1 ]

有符号: [ - 2 ^ ( n - 1 ), 2 ^ ( n - 1 ) - 1 ]


相关文章
|
5月前
|
存储 C语言
C语言学习记录——复习数据存储类别(auto、register、static、extern)
C语言学习记录——复习数据存储类别(auto、register、static、extern)
42 1
|
6月前
|
编译器 C语言 C++
从C语言到C++③(第一章_C++入门_下篇)内联函数+auto关键字(C++11)+范围for+nullptr(下)
从C语言到C++③(第一章_C++入门_下篇)内联函数+auto关键字(C++11)+范围for+nullptr
47 0
|
6月前
|
存储 安全 编译器
从C语言到C++③(第一章_C++入门_下篇)内联函数+auto关键字(C++11)+范围for+nullptr(上)
从C语言到C++③(第一章_C++入门_下篇)内联函数+auto关键字(C++11)+范围for+nullptr
48 0
|
存储 编译器 C语言
C语言进阶教程(再论struct,union,enum)
C语言进阶教程(再论struct,union,enum)
85 0
蓝桥杯小技巧之巧用bit类型定义变量
蓝桥杯小技巧之巧用bit类型定义变量
82 0
|
存储 C语言 C++
C语言进阶第八篇【三大自定义类型详解:结构体struct,枚举enum,联合union】(下)
C语言进阶第八篇【三大自定义类型详解:结构体struct,枚举enum,联合union】(下)
194 0
C语言进阶第八篇【三大自定义类型详解:结构体struct,枚举enum,联合union】(下)
|
编译器 C语言 C++
C语言进阶第八篇【三大自定义类型详解:结构体struct,枚举enum,联合union】(上)
C语言进阶第八篇【三大自定义类型详解:结构体struct,枚举enum,联合union】(上)
101 0
C语言进阶第八篇【三大自定义类型详解:结构体struct,枚举enum,联合union】(上)
|
存储 C语言
(关键字,Static,typedef)-C语言笔记
(关键字,Static,typedef)-C语言笔记
151 0
(关键字,Static,typedef)-C语言笔记
|
存储 C++
⭐️ 关键字深度剖析 ⭐️第三章(关键字sizeof\signed\unsigned&原反补\数据范围)(一)
本文主要讲解点 关键字sizeof的理解 关键字signed\unsigned的理解 掌握原反补概念 深刻理解数据的取值范围
⭐️ 关键字深度剖析 ⭐️第三章(关键字sizeof\signed\unsigned&原反补\数据范围)(一)
|
存储 C语言
⭐️ 关键字深度剖析 ⭐️第五章(深入C语言三种类型(float/bool/指针)与“零值“的比较)(续)
浮点数在内存中存储,并不想我们想的是完整存储的 在十进制转化成为二进制,是有可能有精度损失的
⭐️ 关键字深度剖析 ⭐️第五章(深入C语言三种类型(float/bool/指针)与“零值“的比较)(续)