《深入理解计算机系统》书籍学习笔记 - 第二课 - 位,字节和整型

news2024/11/24 7:01:20

Lecture 02 Bits,Bytes, and Integer 位,字节和整型

文章目录

  • Lecture 02 Bits,Bytes, and Integer 位,字节和整型
    • Byte 字节
    • 位操作
      • 布尔代数
      • 集合的表现形式和操作
      • C语言的逻辑操作
    • 位移操作
    • 整型
      • 数值范围
      • 无符号与有符号数值
        • 无符号与有符号在C中
    • 拓展和截断
      • 拓展
      • 截取

只有宾夕法尼亚大学建立的第一台电子计算机 ENIAC 使用十进制进行了算数运算,它们使用十个电子管来表示每个数字。

Byte 字节

Byte = 8 bits

  • 二进制:00000000 - 11111111
  • 十进制:0 - 255 = 2^8 - 1
  • 十六进制:00 - FF (1111=2^4 - 1 = 15 = F)

C 数据类型占用的字节:
在这里插入图片描述

位操作

布尔代数

  • & and 且

  • | or 或

  • ~ not 非

  • ^ xor(Exclusive-or) 异或
    A^B = 1, 当 A=1或者B=1时,但不是全部都为1

^ | 0  1
---------
0 | 0  1
1 | 1  0

集合的表现形式和操作

  • 表现形式
    宽度为w (width)位的向量表示的子集: {0, …, w–1}
    如果j ∈ A (j 属于 A) ,则 第j位数 a = 1

操作示例:
01101001 { 0, 3, 5, 6 }
76543210
01010101 { 0, 2, 4, 6 }
76543210

操作:

  • & Intersection (交集) 01000001 { 0, 6 }
  • | Union (并) 01111101 { 0, 2, 3, 4, 5, 6 }
  • ^ Symmetric difference(对称差) 00111100 { 2, 3, 4, 5 }
  • ~ Complement(补集) 10101010 { 1, 3, 5, 7 }

C语言的逻辑操作

与位操作有些相似,不要搞混淆。

操作符:&&, ||, !
特性:

  • 0 视为 “False”
  • 所有非0的都视为 “True”
  • 返回值都是 0 或 1
  • 提前终止特性

位移操作

  • 左移 x << y
    将位向量x左移y个位置。
    扔掉左边多余的部分。
    右边空位填0

  • 右移 x >> y
    将位向量x右移y个位置。
    扔掉右边多余的部分。

逻辑右移:
左边空位填0

算术右移:
左边空位填充符号位

示例:

Argument x    : 10100010
x << 3        : 00010000
Log. x >> 2   : 00101000
Arith. x >> 2 : 11101000

整型

在这里插入图片描述

  • 无符号类型 Unsigned
  • 二进制补码 Two’s Complement
    符号位:0 表示正数, 1 表示负数。

补码:表示有符号数的最常用的方式,有符号数还有其他表示方式,但是补码是最常用的方式。

数值范围

  • 无符号值
    UMin = 0 (000…0)
    Umax = 2^w -1 (111…1)

  • 二进制补码
    TMin = -2^(w-1) (100…0)
    TMax = 2^(w-1) -1 (011…1)

-1 : 111…1

如下:
在这里插入图片描述

  • 规律
    |TMin| = TMax + 1
    UMax = 2 * TMax + 1

  • c程序
    limits.h 定义了一些边界值。

#include <limits.h>
ULONG_MAX
LONG_MAX
LONG_MIN

无符号与有符号数值

B: Binary 二进制,U: Unsigned 无符号, T: Two’s Complement 二进制补码

在这里插入图片描述

无符号与有符号的转换映射:

在这里插入图片描述

映射值示例:
在这里插入图片描述

4位为例,符号位为1时:符号位的值 + 其他位的值
二进制补码:-2^3 + 其他位的值 = -8 + 其他位的值
无符号:2^3 + 其他位的值 = 8 + 其他位的值
无符号 - 二进制补码 = 8 + 其他位的值 - (-8 + 其他位的值) = 16 = 2^4

  • 二进制补码转换为无符号
    Umax = 2^w -1 (111…1)
    TMin = -2^(w-1) (100…0)
    TMax = 2^(w-1) -1 (011…1)
    在这里插入图片描述
无符号与有符号在C中
  • 默认整型为有符号
  • 无符号用后缀U表示:0U, 123123U

转换:

  • 显示转换
int tx, ty;
unsigned ux, uy;
tx = (int)ux;
uy = (unsigned) ty;
  • 隐士转换
    在参数赋值和过程调用时可能发生。
ty = ux;  // 无符号赋值给有符号
uy = ty;
  • 有符号无符号比较运算
    W = 32, TMIN = -2,147,483,648, TMAX = 2,147,483,647
常量1               常量2               比较结果    结果类型    
0                   0U                  ==          unsigned
-1                  0                   <           signed
-1                  0U                  >           unsigned
2147483647          -2147483647-1       >           signed	
2147483647U         -2147483647-1       <           unsigned
-1                  -2                  >           signed
(unsigned)-1        -2                  >           unsigned
2147483647          2147483648U         >           unsigned
2147483647         (int)2147483648U     >           signed

结论:无符号和有符号的运算,有符号转化为无符号进行运算和比较,结果为无符号。

代码验证结论:

#include <stdio.h>

void main() {
    int x = -7;
    unsigned int ux = 3;
    if (x > ux) {
        printf("signed -7 > unsigned 3");
    }
}

// output:
// signed -7 > unsigned 3

拓展和截断

拓展

前面填充数字。
结果不会改变。

  • 无符号
    拓展字段用0填充。

  • 有符号
    拓展字段用符号位填充。

    short int x = 15213;
    int ix = (int)x;
    short int y = -15213;
    int iy = (int)y;

x: 15213, 00111011 01101101
ix: 15213, 00000000 00000000 00111011 01101101
y: -15213 11000100 10010011
iy: -15213, 11111111 11111111 11000100 10010011

截取

截取前面的数字。
对于小数值结果不会改变,对于大数值结果可能会改变。

  • 无符号
    直接截取,相当于进行模运算:x mod 2^k

  • 有符号
    前面的符号位被截取。
    类似于模运算。

#include <stdio.h>

void main() {
    int x = 53191;
    short int ix = (int)x;
    int y = -53191;
    short iy = (int)y;
    printf("x: decimal=%d,Hex=%x, ",x,x);
    printfBinary(x);
    printf("ix: decimal=%d,Hex=%x, ",ix,ix);
    printfBinary(ix);
    printf("y: decimal=%d,Hex=%x, ",y,y);
    printfBinary(y);
    printf("iy: decimal=%d,Hex=%x, ",iy,iy);
    printfBinary(iy);
}

//输出一个数的二进制
printfBinary(int num,int w){
    unsigned mask;
    sscanf_s("%d", &num);
    mask = 1u << 31;
    for(;mask;mask>>=1){
        printf("%d", num&mask?1:0);
    }
    printf("\n");
}

// output
// x:  decimal=53191 ,Hex=cfc7    , 0000000000000000 1100111111000111
// ix: decimal=-12345,Hex=ffffcfc7, 1111111111111111 1100111111000111
// y:  decimal=-53191,Hex=ffff3039, 1111111111111111 0011000000111001
// iy: decimal=12345 ,Hex=3039    , 0000000000000000 0011000000111001

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1187174.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

个人网厅——提取

目录 需求文档 公积金提取类 controller层 service层 service层实现类 1.验证&#xff08;个人账户&#xff09; 2.提交&#xff08;添加&#xff09; controller层 service层 service层实现类 3.分页查询 controller层 service层 service层实现类 4.详情查询 co…

键盘打字盲打练习系列之认识键盘——0

一.欢迎来到我的酒馆 盲打&#xff0c;yyds&#xff01; 目录 一.欢迎来到我的酒馆二.开始练习 二.开始练习 经常看视频&#xff0c;看到别人在键盘上一通干净利索的操作&#xff0c;就打出想要的文字。心里突然来一句&#xff1a;卧槽&#xff0c;打字贼快啊&#xff01;思索下…

【Java笔试强训】Day9(CM72 另类加法、HJ91 走方格的方案数)

CM72 另类加法 链接&#xff1a;另类加法 题目&#xff1a; 给定两个int A和B。编写一个函数返回AB的值&#xff0c;但不得使用或其他算数运算符。 题目分析&#xff1a; 代码实现&#xff1a; package Day9;public class Day9_1 {public int addAB(int A, int B) {// wr…

解析找不到msvcr100.dll文件的解决方法,4个方法修复msvcr100.dll

msvcr100.dll是Microsoft Visual C 2010运行库的组成部分&#xff0c;一些基于Visual C开发的软件运行时会依赖这个dll文件。出现“找不到msvcr100.dll”的错误提示&#xff0c;往往意味着这个文件在你的计算机系统中丢失或损坏&#xff0c;导致相关程序无法正常运行。以下是找…

【Android】画面卡顿优化列表流畅度一

卡顿渲染耗时如图&#xff1a; 卡顿表现有如下几个方面&#xff1a; 网络图片渲染耗时大上下滑动反应慢&#xff0c;甚至画面不动新增一页数据加载渲染时耗时比较大&#xff0c;上下滑动几乎没有反应&#xff0c;画面停止没有交互响应 背景 实际上这套数据加载逻辑已经运行…

数字化广告运营,小迈科技的关键一步

数据驱动广告运营是小迈科技提升整体经营效率、构建竞争优势的重要选择。 截止目前&#xff0c;小迈科技已经完成了数据驱动的广告运营体系的搭建&#xff0c;并通过与神策数据的深入合作&#xff0c;借力神策客户旅程分析平台&#xff0c;在广告投放、运营活动等各个环节实现了…

Samtec连接器技术前沿 | 全新对准功能确保测试和测量应用中的精确对准

【摘要/前言】 Samtec开发了一种创新的易于使用的对准技术&#xff0c;以确保测试和测量应用中的精密、高频压缩安装连接器的峰值性能。下面解释了我们所看到的趋势&#xff0c;并概述了我们针对出现的常见对准挑战所开发的解决方案。 【问题所在】 随着数据传输率的不断提高…

C++的Odyssey之旅——STL

W...Y的主页 &#x1f60a; 代码仓库分享&#x1f495; &#x1f354;前言&#xff1a;我们已经将基本语法了解的差不多了&#xff0c;现在我们就该进入C中最重要也是最富有特点的一部分——STL。在学习C语言中我们想要使用顺序表、链表等一些数据结构进行做题时都需要进行这…

pyinstaller 错误排查的验证史

在pyinstaller打包时出现如下错误&#xff0c;很明显感觉是路径被转义 或者历史迁移导致的 报错路径&#xff1a;OSError: [WinError 123] 文件名、目录名或卷标语法不正确。: D:\t_job\x07naconda3_20201121\\Lib\\site-packages 安装路径&#xff1a;File "D:\11_job\…

这些机器视觉工程师犯法了,竟然在闲鱼或淘宝上卖公司的机器视觉程序架构源码

目录 ​从个人层面来讲&#xff1a;从公司层面来讲&#xff1a; ​从个人层面来讲&#xff1a; 个人是法盲&#xff0c;法律意识淡薄只是一方面&#xff0c;另外一个方面就是对于代码的所有权&#xff0c;以及代码的安全性重视不够。把机器视觉程序架构源码打包在闲鱼或淘宝上…

软件测试/测试开发丨接口测试Mock实战练习学习笔记

点此获取更多相关资料 本文为霍格沃兹测试开发学社学员学习笔记分享 原文链接&#xff1a;https://ceshiren.com/t/topic/27857 一、Rewrite 1.1、Rewrite 原理 1.2、Rewrite 实战 Tools → Rewrite 勾选 Enable Rewrite 点击下方 Add 按钮新建一个重写的规则 在右侧编辑重…

制作一个模板

创建模拟对象是一种有用的技术&#xff0c;它允许您专注于应用程序的一部分&#xff0c;而不必担心系统中尚未存在的其他部分。我想设计应用程序的主页&#xff0c;我不想因为没有用户系统而分心&#xff0c;所以我只创建了一个用户对象&#xff0c;这样我就可以继续了。 应用…

【紫光同创国产FPGA教程】【PGC1/2KG第七章】7.数字钟实验例程

本原创教程由深圳市小眼睛科技有限公司创作&#xff0c;版权归本公司所有&#xff0c;如需转载&#xff0c;需授权并注明出处 适用于板卡型号&#xff1a; 紫光同创PGC1/2KG开发平台&#xff08;盘古1K/2K&#xff09; 一&#xff1a;盘古1K/2K开发板&#xff08;紫光同创PGC…

工厂设备扫码使用售卖联网开发需要怎么开发开源代码?

我们将详细介绍如何使用开源代码开发一套用于工厂设备联网统计的系统。我们将详细讨论所需硬件组件的选择、开源框架和库的使用、软件开发流程以及最后的集成和部署。在这个过程中&#xff0c;我们将提供实用的操作步骤和指导&#xff0c;帮助你更容易地完成这个复杂的任务。 …

leaflet:利用Leaflet-Geoman绘制多种图形,导出为geojson文件(135)

第135个 点击查看专栏目录 本示例的目的是介绍演示如何在vue+leaflet中利用Leaflet-Geoman绘制多种图形,导出为geojson文件。 灵活地配置Leaflet-Geoman的属性,可以产生各种美妙的绘图效果。利用FileSaver可以导出geojson文件。 直接复制下面的 vue+leaflet源代码,操作2分钟…

C语言求解一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?

完整代码&#xff1a; /* 一个整数&#xff0c;它加上100后是一个完全平方数&#xff0c;再加上168又是一个完全平方数&#xff0c;请问 该数是多少&#xff1f;*/ #include<stdio.h>int main(){//num为最终所求那个数int num;//i*i为第一个完全平方数for (int i 10; …

实验5-1——本地yum源的配置

本地yum源的配置 实验步骤&#xff1a; 1.挂载磁盘(可以看这篇博客&#xff1a;磁盘的挂载和卸载&#xff09; &#xff08;1&#xff09;创建挂载点 mkdir /mnt/cdrom &#xff08;2&#xff09;挂载磁盘 mount /dev/sr0 /mnt/cdrom #或者 mount /dev/cdrom /mnt/cdrom …

嵌入式养成计划-47----QT--基于QT的OpenCV库实现人脸识别功能

一百二十一、基于QT的OpenCV库实现人脸识别功能 121.1 UI 界面 登录按钮现在没啥实际作用&#xff0c;因为没加功能&#xff0c;可以添加在识别成功后运行的功能代码 121.2 思路 显示人脸&#xff1a; 通过 VideoCapture 这个类下面的 open() 方法打开摄像头&#xff0c;对…

算法进阶指南图论 最优贸易

最优贸易 题目描述 C C C 国有 n n n 个大城市和 m m m 条道路&#xff0c;每条道路连接这 n n n 个城市中的某两个城市。任意两个城市之间最多只有一条道路直接相连。这 m m m 条道路中有一部分为单向通行的道路&#xff0c;一部分为双向通行的道路&#xff0c;双向通行的…

大语言模型比武

今年随着 ChatGPT 的流行&#xff0c;并在各个领域有一定程度生产级别的应用。国内外也掀起了一股大语言模型浪潮&#xff0c;各大厂商都推出了自己的大语言模型&#xff0c;阿里推出了 通义千问&#xff0c;腾讯推出了 Hunyuan&#xff0c;亚马逊云推出了 Titan&#xff0c;大…