首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

《深入理解计算机系统》阅读笔记--信息表示和处理(上)

这个结果理论上是非常不应该,这已经违背了我们常识,毕竟正数乘积,最后结果应该还是一个正数,但是这里出现负数情况,虽然结果不对,但是好在即使我们各种交换顺序,结果都是一致 我们再来试试浮点数呢...整数运算和浮点运算会有不同数学属性是因为它们处理数字表示有限性方式不同。...,尤其是强类型语言中 当时总是负数表示最大范围一直被-1 当时很多时候老师都会告诉是因为符号位占了一位,当时可能是一个模糊概念,为啥是符号位占了一位,从补码这个概念,其实就应该完全明白了为啥符号位占了一位...4294967295 这个数字是32位能表示最大数字,即这个是32位Umax 再看一个代码: #include int main() { short int v =...a长度,而传递了0 这个时候length -1 就会变成负数,但是最开始我们定义length时候定义是无符号,所以就会变成当前位数最大值即UMax 所以《= 是总是满足条件,这个时候再取数组时候就会超出数组最大长度

75500

《深入理解计算机系统》阅读笔记--信息表示和处理(上)

这个结果理论上是非常不应该,这已经违背了我们常识,毕竟正数乘积,最后结果应该还是一个正数,但是这里出现负数情况,虽然结果不对,但是好在即使我们各种交换顺序,结果都是一致 我们再来试试浮点数呢...整数运算和浮点运算会有不同数学属性是因为它们处理数字表示有限性方式不同。...,尤其是强类型语言中 当时总是负数表示最大范围一直被-1 当时很多时候老师都会告诉是因为符号位占了一位,当时可能是一个模糊概念,为啥是符号位占了一位,从补码这个概念,其实就应该完全明白了为啥符号位占了一位...4294967295 这个数字是32位能表示最大数字,即这个是32位Umax 再看一个代码: #include int main() { short int v =...a长度,而传递了0 这个时候length -1 就会变成负数,但是最开始我们定义length时候定义是无符号,所以就会变成当前位数最大值即UMax 所以《= 是总是满足条件,这个时候再取数组时候就会超出数组最大长度

96530
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    整型及相关运算符 【Go语言圣经笔记】

    一元加法减法运算符: + // 一元加法 无实际效果 - // 负数 即负号 或者 符号取反 与整数+x是0+x简写,-x是0-x简写;对于浮点数和负数,+x就是x,-x则是x负数。...它使用了Printf函数%b参数打印二进制格式数字;其中%08b08表示打印至少8个字符宽度,不足前缀部分用0填充 var x uint8 = 1<<1 | 1<<5 var y uint8 =...尽管Go语言提供了无符号数运算,但即使数值本身不可能出现负数,我们还是倾向于使用有符号int类型,就像数组长度那样,虽然使用uint无符号类型似乎是一个更合理选择。...,就像bit集合、分析二进制文件格式或是哈希加密操作等,它们通常不用于仅仅是表达非负数场合。...应该避免可能会超出目标类型表示范围数值做类型转换,因为截断行为可能依赖于具体实现: f := 1e100 // a float64 i := int(f) // 结果依赖于具体实现 (笔者注

    1K30

    C语言(2)----数据类型、变量以及操作符

    3.关于signed和unsigned C 语⾔使⽤ signed 和 unsigned 关键字修饰字符型和整型类型 这里signed表示该类型带有正负号整数 而unsigned代表该类型是非负整数,...C语⾔把经常变化值称为变量,不变值称为常量。 从第一点我们可知数据类型是用来描述生活各种数据。而不同数据类型也要对应实际生活不同事物。 例如,年龄是整数,故用int。...它们是用来进行一系列计算符号,而在它们左右两边数字或者未知数被称为操作数,就像:a+b,a与b是操作数,而+就是算术操作符。...但是要注意有个特例就是%c,%c 不忽略空⽩字符,总是返回当前第⼀个字符,⽆论该字符是否为空格.如果要强制跳过字符前空⽩字符,可以写成 scanf(" %c", &ch) ,即 %c 前加上⼀个空格,...这句话意思就是,在测试输入了几个数时候,输入几个数,它读取到就是几个数,但是如果发生了错误或者已经读取到结尾了,比如它要你输入三个数但一个都不输入,那么它就会报错返回EOF,注意EOF在返回值

    10710

    C语言基础】:分支与循环

    C语言中,每个语句以分号 ; 结束,多个语句可以组成代码块,用一大括号 {} 括起来。...\n"); } return 0; } 在这个程序,根据用户输入数字使用switch语句判断它值,并输出相应信息。...此外,C语言中switch语句可以使用整数类型、字符类型以及枚举类型作为表达式,但不支持浮点数类型和字符串类型。 case 和后边数字之间必须有空格。...i++; } return 0; } 在这个示例代码,我们使用int i作为循环计数器,并在while循环中使用逻辑表达式i <= 10判断循环是否继续执行。...3. do-while 循环 在C语言中,当我们需要先执行循环体,然后再判断循环条件是否满足时,可以使用do-while循环。

    23210

    Swift基础语法(常量变量、数据类型、元组、可选、断言)

    注意:尽量不要使用UInt,除非你真的需要存储一个和当前平台原生字长相同无符号整数。除了这种情况,最好使用Int即使要存储值已知是非。...= 1_000_000.000_000_1 数值型类型转换 通常来讲,即使代码整数常量和变量已知非负,也请使用Int类型。...总是使用默认整数类型可以保证整数常量和变量可以直接被复用并且可以匹配整数类字面量类型推测。 只有在必要时候才使用其他整数类型,比如要处理外部长度明确数据或者为了优化性能、内存占用等等。...如果数字超出了常量或者变量可存储范围,编译时候会报错: let cannotBeNegative: UInt8 = -1 // UInt8 类型不能存储负数,所以会报错 let tooBig: Int8...这种选择性使用方式,可以预防隐式转换错误并让代码类型转换意图变得清晰。 要将一种数字类型转换成另一种,要用当前值来初始化一个期望类型数字,这个数字类型就是目标类型。

    2K90

    三篇文章让彻底学会C语言中分支和循环语句——分支语句

    三篇文章让彻底学会C语言中分支和循环语句——(一)分支语句 在我们正式开始学习分支语句之前,我们先来了解一下C语言中都有哪些语句,分支和循环语句又是属于其中哪一类。 1....这里我来简单介绍一下控制语句: 控制语句用于控制程序执行流程,以实现程序各种结构方法(C语言支持三种结构:顺序结构、选择结构、循环结构),它们由特定语句定义符组成,C语言有九种控制语句。...("输入数字是0\n"); else if (num > 0) printf("输入数字是正数\n"); else printf("输入数字负数\...但实际上当你去运行这段代码时候,结果是:啥都没有。 有人这时候就想,这是为什么呢? 这就是悬空else问题,因此可以记住这样一条规则,来防止在这个上面出错,就是else总是跟最近if匹配。...就比如上面的代码就执行了 case1和case2 语句。 所以在 switch 语句中break 语句是非常重要,能实现真正分支效果。

    8510

    Swift基础 基础知识

    注意 仅当您特别需要与平台原生单词大小相同无符号整数类型时,才使用UInt。如果不是这样,最好是Int即使已知要存储是非负值。..._000_000.000_000_1 数字类型转换 对于代码所有通用整数常量和变量,即使已知它们是非负数,也请使用Int类型。...与上面的’ Int ‘和’ Double ‘一样,如果在创建常量或变量时将它们设置为’ true ‘或’ false ‘,就不需要将它们声明为’ Bool ‘。...可选 在值可能不存在情况下,您可以使用可选选项。可选代表两种可能性:要么有一个值,可以解开可选值来访问该值,要么根本没有值。 注意 C或Objective-C不存在可选概念。...可选绑定 可以使用可选绑定来确定一个可选绑定是否包含一个值,如果是,则将该值用作临时常量或变量。

    15400

    深入浅出 FlatBuffers 之 Schema

    如果旧数据不包含任何负数,这将是安全,如果包含了负数,这样改变会出现问题。 table { a:int = 1; b:int = 2; } 复制代码 这样修改不可行。...structs 使用内存少于 table,并且访问速度更快(它们总是以串联方式存储在其父对象,并且不使用虚拟表)。 structs 不提供前向/后向兼容性,但占用内存更小。...对于不太可能改变非常小对象(例如坐标或RGBA颜色)存成 struct 是非常有用。 3....大多数可序列化格式(例如 JSON 或 Protocol Buffers)对于某个字段是否存在于某个对象是非常明确,可以将其用作“额外”信息。...然而,这也意味着测试一个字段是否“存在”有点没有意义,因为它不会告诉,该字段是否是通过调用add_field 方法调来 set ,除非你非默认值信息感兴趣。

    3.9K20

    深入protobuf(Protocol Buffers)原理:简化数据序列化

    只需使⽤ Protobuf 对数据结构进⾏⼀次描述,即可利⽤各种不同语⾔或从各种不同数据流结构化数据轻松 读写。Protocol buffers 很适合做数据存储或 RPC 数据交换格式。...三、protobuf 编译安装及使用⾕歌开源协议标准+⼯具。安装⼯具 —> 根据编写proto⽂件产⽣c++代码。(1)下载。...5.2、ZigZag 编码(针对负数)Varints 编码实质在于去掉数字开头 0, 因此可缩短数字所占存储字节数, 在上⾯例⼦ , 只举例说明了正数 Varints 编码, 但如果数字负数...以C++语⾔实现为例, 对于 int32 类型 pb 字段, 对于如下 定义 proto:message Tint32{ int32 n1 = 1; }Request 包含类型为 int32...如果⼀个数字从不适合相应类型线路解析出来,则会得到与 在 C++ 中将该数字转换为该类型相同效果(例如,如果将 64 位数字读为 int32,它将被截断为 32 位)。

    8000

    Swift 基础之类型

    原理很简单,只要检查值即可。 因为有类型推测,和 C 或者 Objective-C 比起来 Swift 很少需要声明类型。常量和变量 虽然需要明确类型,但是大部分工作并不需要你自己来完成。...二:数值型类型转换 通常来讲,即使代码整数常量和变量已知非负,也请使用 Int 类型。总是使用默认整数类型可以保证整数常量和变量可以直接被复用并且可以匹配整数类字面量类型 推测。...Int8 = Int8.max + 1 // Int8 类型不能存储超过最大值数,所以会报错 由于每整数类型都可以存储不同范围值,所以必须根据不同情况选择性使用数值型类型转换。...这种选择性使用方式,可以预防隐式转换错误并让代码类型转换意图变得清晰。 要将一种数字类型转换成另一种,要用当前值来初始化一个期望类型数字,这个数 字类型就是目标类型。...在下面的例子,常量 twoThousand 是 UInt16 类型,然而 常量 one 是 Uint8 类型。它们不能直接相加,因为它们类型不同。

    34810

    这道LeetCode题究竟有什么坑点,让它反对是点赞9倍?

    在实现代码之前,应当事先思考所有可能情况。这里给出一份可能存在于有效十进制数字字符列表: 数字 0-9 指数 - "e" 正/负号 - "+"/"-" 小数点 - "."...当然,在输入,这些字符上下文也很重要。 不知道大家感受到了没有,这其中情况不少,涉及符号就很多。除了基本数字之外,还有小数点、空格、正负号、e。...所以如果试着去想清楚所有的这些情况,会发现这是非常困难一件事,甚至可能会越想情况越多,觉得怎么也理不清楚,即使理出了很多情况,也不知道是否有遗漏,很容易让人抓狂并且心烦气躁,明明很简单问题做不出来...因为这四个部分是有顺序,我们只需要判断它们顺序合理性就可以了。根据顺序合理性,我们可以进一步推测出每一个符号允许出现位置,所有和预期位置不符符号都是非。...如果出现在其他位置一定也是非数字数字没有特别的判断,本题当中没有前导0问题。 e只能出现一次,并且e之后一定要有数字才是合法,123e这种也是非

    45120

    c语言从入门到实战——分支和循环

    上面示例,原意是 x == 3 ,但是不小心写成 x = 3 。这个式子表示变量 x 赋值 3 ,它返回值为 3 ,所以 if 判断总是为真。...=0) || (year%400==0)) printf("是闰年\n"); return 0; } 4.5 短路 C语言逻辑运算符还有一个特点,它总是左侧表达式求值,再右边表达式求值,...就比如上面的代码就执行了 case2 语句。 所以在 switch 语句中 break 语句是非常重要,能实现真正分支效果。...9. break和continue语句 在循环执行过程,如果某些状况发生时候,需要提前终止循环,这是非常常见现象。...假设要判断i是否为素数,需要拿2~ i -1之间数字去试除 i,需要产生2~i - 1之间数字,也可以使用循环解决。

    13910

    分支和循环(上)

    上面示例,原意是 x == 3 ,但是不小心写成 x = 3 。这个式子表示变量 x 赋值 3 ,它返回值为 3 ,所以 if 判断总是为真。...能被400整除是闰年 4.5 短路 短路这个概念在逻辑运算符才有,C语言逻辑运算符还有⼀个特点,它总是左侧表达式求值,再右边表达式求值,这个顺序是保证。...9. break和continue语句 在循环执行过程,如果某些状况发生时候,需要提前终止循环,这是非常常见现象。...假设要判断i是否为素数,需要拿2~i-1之间数字去试除i,需要产生2~i-1之间数字,也可以使用循环解决。 3. 如果2~i-1之间有数字能整除i,则i不是素数,如果都不能整除,则i是素数。...i++)     {         //判断i是否为素数          //循环产⽣2~i-1之间数字          int j = 0;         int flag =

    5410

    Protobuf编码指南

    然后把消息序列化到输出流,如果能查看编码后消息,会看到三个字节: 08 96 01 到目前为止,如此小而且都是数字-但是这是什么意思呢?...首先需要把每个字节msb去掉,因为它只用来告诉我们是否已经到达数字最后一个字节(本例varint占用俩个字节所以第一个字节msb为1) 1010 1100 0000 0010→ 010 1100...现在你知道字段编号是1值是一个varint。使用前面学到解码varint知识,可以看到下面的两个字节存储着值150。...但是,在编码负数时,带符号int类型(sint32和sint64)与“标准” int类型(int32和int64)之间存在着巨大区别。...如果将int32或int64用作负数类型,则结果varint总是十个字节长––实际上,它被视为一个非常大无符号整数。

    1.3K10

    Android经典面试题之Kotlin==和===有什么区别?

    心里种花,人生才不会荒芜,如果也想一起成长,请点个关注吧。 在 Kotlin ,== 和 === 是两个不同操作符,它们用于比较两个值是否相等,但它们行为和用途有所不同。...当用于对象引用时,== 比较是两个引用是否指向同一个对象实例(即它们是否是同一个对象)。 对于可空类型(如 Int?),== 还会检查两个可空变量是否都为 null,如果是,则它们被认为是相等。...如果两个引用指向不同对象实例,即使它们内容相同,=== 也会返回 false。 对于可空类型,=== 不会认为两个 null 值是相等即使它们都是 null。...同样,这些操作符适用于实现了 Comparable 接口类型。 4、 in 和 !in: in 用于检查一个值是否在某个范围内(例如,一个数字是否在两个数字之间),或者一个元素是否存在于集合。 !...它返回一个整数,如果调用对象小于、等于或大于参数,则分别返回负数、零或正数。 7、 equals 方法: Any 类 equals 方法用于比较两个对象是否相等。

    7610

    Swift基础语法

    注意:尽量不要使用UInt,除非你真的需要存储一个和当前平台原生字长相同无符号整数。除了这种情况,最好使用Int即使要存储值已知是非。...1_000_000.000_000_1 数值型类型转换 通常来讲,即使代码整数常量和变量已知非负,也请使用Int类型。...总是使用默认整数类型可以保证整数常量和变量可以直接被复用并且可以匹配整数类字面量类型推测。 只有在必要时候才使用其他整数类型,比如要处理外部长度明确数据或者为了优化性能、内存占用等等。...这种选择性使用方式,可以预防隐式转换错误并让代码类型转换意图变得清晰。 要将一种数字类型转换成另一种,要用当前值来初始化一个期望类型数字,这个数字类型就是目标类型。...注意:如果一个变量之后可能变成nil的话请不要使用隐式解析可选。如果需要在变量生命周期中判断是否是nil的话,请使用普通可选类型。

    1.5K60
    领券