首页 > 其他分享 >CSAPP Notes: Types

CSAPP Notes: Types

时间:2023-08-22 22:33:35浏览次数:44  
标签:右移 std CSAPP int Notes 补码 unsigned long Types

CSAPP Notes,类型

随手写的,可能会有错误();

类型

数据类型 大小
char 1
bool 1
short int (short) 2
int 4
long int (long) 4 或 8 (取决于平台)
long long int 8
float 4
double 8
long double 8 或 16 (取决于平台)
wchar_t 2 或 4 (取决于平台)
size_t 4 或 8 (取决于平台)
ptrdiff_t 4 或 8 (取决于平台)

不取决于平台的类型:

数据类型 大小
std::int8_t 1
std::int16_t 2
std::int32_t 4
std::int64_t 8
std::uint8_t 1
std::uint16_t 2
std::uint32_t 4
std::uint64_t 8

要注意一些情况可能在不经意间导致 wrap around, 然后导致死循环——尤其是在处理 unsigned 类型的时候.

unsigned int i;
for (i = __; i < cnt; i--) {
    a[i] = a[i + 1]
}

或者更加难以察觉的:

size_t i;
for (i = __; i < cnt; i--) {
    a[i] = a[i + 1]
}

iunsigned 类型的时候,会 wrap around 导致死循环——这是一类难以察觉的错误;

所以要确保 for循环里的变量是有符号的;

补码

补码的理解

十进制 二进制(原码) 补码
0 00000000 00000000
1 00000001 00000001
-1 10000001 11111111
2 00000010 00000010
-2 10000010 11111110
3 00000011 00000011
-3 10000011 11111101

第一位是符号位;剩下的是数字位.

补码的几种理解:

  1. 取反再+1;
  2. 第一位理解成负数,比如 -2 是 \(-2(dec) = 01111110(bin) + (-10000000)(bin)\);

补码的性质

加法和乘法运算封闭——所以物理上,底层的运算逻辑可以复用无符号的那一套东西;

右移

算数右移和逻辑右移是有区别的;

逻辑右移

逻辑右移就是照字面进行右移;

例如,考虑一个8位的二进制数:10111010,进行逻辑右移1位:

Copy code
原始数值:  10111010
逻辑右移:  01011101

在这个例子中,原始数值向右移动一位,右侧的位被丢弃,同时在左侧插入一个零位。

算数右移

例如,考虑一个8位的二进制数:10111010,进行算数右移1位:

Copy code
原始数值:  10111010
算数右移:  11011101

在这个例子中,原始数值向右移动一位,同时在左侧插入一个与原始符号位相同的位值。

在 C/C++ 中只有算数右移,在 Java 中两种都有显示的定义;

所以在 C/C++ 中,右移运算 >> 只对有符号的类型有意义;对于无符号的类型是无意义的;

    unsigned int ux = -100;
    if (ux > -1) {
        cout << "true" << endl;
    }
    else {
        cout << "false" << endl;
    }

输出:

false 
    unsigned int ux = 100;
    if (ux > -1) {
        cout << "true" << endl;
    }
    else {
        cout << "false" << endl;
    }

输出:

false

:负数的负数

    int x = INT_MIN;
    cout << x << endl;

    cout << -x << endl;

输出:

-2147483648
-2147483648

所以负数的负数不一定是正数.

这是由于补码的不对称性导致的,事实上也就只有这一种情况,就是最小的那个数 INT_MIN :他是没有对应的正数的;

大端与小端

内存按照递增顺序排列——

大端就是好认的那种;

浮点数

不想学()

标签:右移,std,CSAPP,int,Notes,补码,unsigned,long,Types
From: https://www.cnblogs.com/kion/p/17649861.html

相关文章

  • typeScript学习-类型断言、类型转换
    typeScript学习类型断言、类型转换1、类型断言:语法格式:A数据类型的变量asB数据类型。letb:Bletc:C=basC理解:是绕过TS编译检查,类型断言就是对编译器说:我是这个类型了,无需检查。2、类型断言使用场景exportclassVechile{staticcount:number=3......
  • TypeScript使用技巧
    文章目录使用技巧TypeScript内置的工具类型keyofextends限定泛型interface与type区别TypeScript作为JavaScript的超集,通过提供静态类型系统和对ES6+新特性的支持,使JavaScript开发变得更加高效和可维护。掌握TypeScript的使用技巧,可以帮助我们更好地开发和组织JavaScript项......
  • 采用typescript编写,实现ofd前端预览、验章。
    前言 浏览器内核已支持pdf文件的渲染,这极大的方便了pdf文件的阅读和推广。ofd文件作为国产板式标准,急需一套在浏览器中渲染方案。本人研究ofd多年,分别采用qt、c#开发了ofd阅读器。本人非前端开发人员,对js、typescript并不熟悉,所以对开发web版阅读器迟迟没有下手。但是,本人......
  • CSAPP-Shell Lab总结
    提供的工具:parseline:获取参数列表char**argv,返回是否为后台运行命令(true)。clearjob:清除job结构。initjobs:初始化jobs链表。maxjid:返回jobs链表中最大的jid号。addjob:在jobs链表中添加jobdeletejob:在jobs链表中删除pid的job。fgpid:返回当前前台运行job的pid号。getjobp......
  • [React Typescript] React namespace
    export=React;exportasnamespaceReact;declarenamespaceReact{////ReactElements//----------------------------------------------------------------------typeElementType<P=any>={[KinkeyofJSX.I......
  • [React Typescript] Inferring Type Arguments in Curried Hooks
    import{DependencyList,useMemo,useState}from"react";import{Equal,Expect}from"../helpers/type-utils";constuseCustomState=<TValue>(initial:TValue)=>{const[value,set]=useState<TValue>(initial);......
  • [React Typescript] Function overload in React hook
    import{useState}from"react";import{Equal,Expect}from"../helpers/type-utils";typeUseStateReturnValue<T>={value:T;set:React.Dispatch<React.SetStateAction<T>>;};exportfunctionuseStateAsObjec......
  • Deno 中使用 @typescript/vfs 生成 DTS 文件
    背景前段时间开源的STC工具,这是一个将OpenApi规范的Swagger/Apifox文档转换成代码的工具。可以在上一篇(《OpenApi(Swagger)快速转换成TypeScript代码-STC》)随笔里面查看这个工具的介绍和使用。为了支持生成Javascript,近期添加了JavaScript插件,并且生成DTS文件。实......
  • TypeScript学习
    TypeScript快速入门JavaScript是一种属于网络的高级脚本语言,已经被广泛用于Web应用开发,常用来为网页添加各式各样的动态功能,为用户提供更流畅美欢的浏览效果。TypeScript是JavaScript的一个超集,它扩展了JavaScript的语法通过在JavaScript的基础上添加静态类型定义......
  • games101-homework-notes
    Games101作业笔记Created:2023-06-19T12:00+08:00Published:2023-08-17T16:23+08:00Categories:ComputerGraphics目录pa0hw1ProjectionMatrixTriangleRasterizerprocesshw2insidetrianglerasterize_trianglemyhw2bugs使用\(y+0.5\)setindex导致三角形分裂屏幕两......