IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> C++_计算机的信息存储表示 -> 正文阅读

[C++知识库]C++_计算机的信息存储表示

字长

字长word size, 决定了 虚拟空间的最大地址

整数表示

对于 (有符号数), 几乎所有的机器, 都使用的是: 补码表示

补码 的意思是: 我给定你一个整数x, 那么, 他在 内存里的 bit位, 是怎样的排布呢? 也就是, 他的机器码 是什么样子

补码 规则如下
比如一个整数, 他有x个bit位, 他的bit位为: b_0, b_1, b_2, ..., b_(x-1) 规定, b_0为最低位 b_? 为0/1

则, 这x个bit位, 所对应的 (整数)值为:
b 0 + b 1 ? 2 + b 2 ? 4 + b 3 ? 8 + . . . ? b ( x ? 1 ) ? 2 x ? 1 b_0 + b_1 * 2 + b_2 * 4 + b_3 * 8 + ... - b_(x-1) * {2^{x-1}} b0?+b1??2+b2??4+b3??8+...?b(?x?1)?2x?1
注意, 前面的 (x-1)个低位, 是直接相加; 而, 最后的 最高位, 是减法!!!

  • 当最高位b_(x-1)为0, 此时, 最后一项的减法不生效;
    此时, 低位的(x-1)个bit, 一共有 2^(x-1)种 机器码, 这些机器码 所对应的 整数, 就为: 该机器码的二进制的所表示的整数
    即, 确立了 [0, 1, 2, ..., 2^(x-1) - 1]这些数
    可以发现, 这种情况, 对应的都是( 0 和 正数)

  • 当最高位b_(x-1)为1, 此时, 最后一项的 减法 生效
    此时, 低位的(x-1)个bit, 一共有 2^(x-1)种 机器码; 转换规则如上计算出来: 他们所表示的整数是: [-1, -2, ..., -2^(x-1)]
    可以发现, 这种情况, 对应的都是( 负数)

    对于这种情况, 即(最高位为1 即负数情况) 这里有一个口诀,
    对于负数-x的机器码, 将他 -> (取反x个bit全部取反) -> (+1)后, 将此时的机器码当成一个x位的二进制, 就可以得到x

    • 比如, 一个机器码是: 1 0000, (最高位是1, 表示负数, 可以使用这个"口诀")
      1, (取反: 0 1111) 2, (+1: 1 0000 该值为: 8), 说明, 该机器码1 0000 所表示的数为: -8
    • 比如, 一个机器码是: 1 1111, (最高位是1, 表示负数, 可以使用这个"口诀")
      1, (取反: 0 0000) 2, (+1: 0 0001 该值为: 1), 说明, 该机器码1 1111 所表示的数为: -1

    这个口诀, 非常重要!!!
    他还可以反过来用, (机器码 -> 整数 取反, +1) (整数 -> 机器码 -1, 取反)
    比如: -1的机器码(补码)是什么呢?
    因为是负数, 所以可以使用"口诀"; 假设, 机器码长度为5
    (取绝对值: 1) -> (二进制: 0 0001) -> (-1: 0 0000) -> (取反: 1 1111); 故, 他的机器码为: 1 1111

移位

左移: (不管是: 有/无 符号 整数), 左移, 都是低位补0

右移:

  • 逻辑右移补0 (无符号: 高位补0)
  • 算术右移补符号位 (有符号: 高位补符号位)

强转

相同长度

T 为 整型类型, T 和 unsigned T1的强转, 不会改变 机器码 (即内存bit位不会改变), 改变的 只是 (解析方式)

短 -> 长

unsigned -> unsigned
比如, A 是 unsigned类型, 机器码是: [c, b, a] (a为低位),
则让A强转到更长的 unsigned类型, 他会变成: [0, 0, 0, c, b, a]
即, 高位补0


signed -> signed
比如, A 是 signed类型, 机器码是: [c, b, a] (a为低位),
则让A强转到更长的 signed类型, 他会变成: [x, x, x, c, b, a]
且, x = (c == 0 ? 0 : 1) (即, c为0 -> 则均补0; 否则, 均补1)

长 -> 短

unsigned -> unsigned
比如, A 是 unsigned类型, 机器码是: [e, d, c, b, a] (a为低位),
则让A强转到更短的 unsigned类型, 他会变成: [c, b, a]
即, 高位去掉 相当于, 取模


signed -> signed
比如, A 是 signed类型, 机器码是: [e, d, c, b, a] (a为低位),
则让A强转到更长的 signed类型, 他会变成: [c, b, a]
即, 高位去掉 此时, c为符号位


即, 高位到低位的强转, 就是简单的 (将 高位给删除掉)

乘法

整数x * 常数k, k会变成 2次幂形式

比如, -1 * 6, 6 = 2^2 + 2^1, 所以: -1 * 6 = -1 * (2^2 + 2^1) = (-1 << 2) + (-1 << 1)

(-1 << 2) == [1, 1111] << 2 == [1, 111, 00] == -4
(-1 << 1) == [1, 1111] << 1 == [1, 1111, 0] == -2

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-04-04 11:50:13  更:2022-04-04 11:50:38 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 1:17:09-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码