补码

位移进制运算

断了今生、忘了曾经 提交于 2020-01-26 12:33:08
带符号右移 题:-15 >> 2 = -4 15原码:   00000000 00000000 00000000 00001111 //32位,二进制 反码:    11111111 11111111 11111111 11110000 //0变1,1变0 补码:    11111111 11111111 11111111 11110001 //最后位加1,-15二进制 右移2位:  11111111 11111111 11111111 11111100 //右边丢弃2位,前面30位保留,左边补1 取反: 00000000 00000000 00000000 00000011 //0变1,1变0 +1: 3+1 结果: =-4 //负号保留,十进制 带符号左移 题: 10 << 2 = 40 10 补码: 00000000 00000000 00000000 00001010 //32位,二进制 左移2位: 00000000 00000000 00000000 00101000 //左边丢弃2位,右边补0 结果: 40 //十进制   无符号右移 题:-4321 >>> 30 = 3 4321原码:   00000000 00000000 00010000 11100011 //32位,二进制 反码:    11111111 11111111 11101111 00011100 /

第二章 信息的表示和处理

旧街凉风 提交于 2020-01-25 01:19:05
1. 三种重要的数字表示 (1)无符号数、有符号数、浮点数 正数的原码、反码以及补码是其本身。 负数的原码是其本身,反码是对原码除符号位之外的各位取反,补码则是反码加1。 (2)为什么用补码表示 能够统一+0和-0的表示 采用原码表示,+0的二进制表示形式为0 000 0000,而-0的二进制表示形式为1 000 0000; 采用反码表示,+0的二进制表示形式为0 000 0000,而-0的二进制表示形式为1 111 1111; 采用补码表示,+0的二进制表示形式为0 000 0000,而-0的二进制表示形式为1 111 1111+1=1 0000 0000,因为计算机会进行截断,只取低8位,所以-0的补码表示形式为0000 0000。 补码的表示范围比原码和反码表示的范围都要大。用补码能够表示的范围为-128~127,0~127分别用00000000~01111111来表示,而-127~-1则用10000001~11111111来表示,多出的10000000则用来表示-128。 对于有符号整数的运算能够把符号位同数值位为一起处理 如果把符号位单独考虑的话,CPU指令还要特意对最高位进行判断,使计算机的最底层实现变得复杂。 (3)整数溢出漏洞 参考资料: 整数溢出与程序安全 一个整数是一个固定的长度,它能存储的最大值是固定的,当尝试去存储一个大于这个固定的最大值时

进制的介绍,原码,补码,反码

旧街凉风 提交于 2020-01-24 16:14:28
计算机中的二进制: 一些固有的概念不介绍,直接更加形象例子的介绍: 比如: 十进制的1 转换为二进制就是 0 0 0 0 0 0 0 1 2的0次方=1 十进制的-1 转换为二进制就是 1 0 0 0 0 0 0 1 高位 :其中红色标记的是高位,1是负数,0为正数 以-2为例子:(因为正数的原码补码反码都是一样的,所以不再描述) -2的原码: 1 0 0 0 0 0 1 0 --2的反码: 1 1 1 1 1 1 0 1 -2的补码: 1 1 1 1 1 1 1 0 反码加上1,2进制遇二进一(计算机是通过补码进行运算的,所以补码非常的重要) 来源: https://www.cnblogs.com/qiaohechen/p/12232254.html

RFC791-IP-3.1Internet Header Format

╄→гoц情女王★ 提交于 2020-01-24 15:42:08
下面是网络包首部的一个内容摘要: version :4位 版本(version)字段指明了数据包首部的格式,此文档描述的是版本4 IHL :4位 首部长度(Internet Header Length)字段表达网络包首部的长度,以32位(4字节)为单位,所以,也就是指向数据的开始位置。注意,有效的最小值是5 type of service(TOS) :8位 服务类型字段指示了此次服务需要的抽象参数,在数据传输途径某个特定网段的时候,基于这些抽象参数去选择具体的服务参数。有些网络会有不同的服务优先级,高级别的传输会被认为比低级别的传输更重要。主要的工作是在low-delay,high-reliability, high-throughput三者直接做选择。 0-2位:优先级precedence 3位:0 = 正常延时normal delay; 1 = 低延时low dalay 4位:0 = 正常吞吐量normal throughput;1 = 高吞吐量high throughput 5位:0 = 正常可靠性normal relibility;1 = 高可靠性high relibility 6-7位:保留 precedence 111-网段控制network control 110-网络控制internetwork control 101-CRITIC/ECP 100-flash

C++中的补码公式与位域

牧云@^-^@ 提交于 2020-01-23 21:57:30
C++中的补码公式与位域: 代码很简单就不多说: 补码公式: #include <iostream> using namespace std; void operator_1(void); void operator_2(void); void operator_3(void); int main(void) { /* -x = ~x+1 = ~(x-1) ~x = -x-1 -(~x) = x+1 ~(-x) = x-1 x+y = x - ~y-1 = (x|y) + (x&y) x-y = x + ~y+1 = (x|~y) - (~x&y) x^y = (x|y) - (x&y) x|y = (x& ~y) + y x&y = (~x|y) - ~x x==y : ~(x-y|y-x) x!=y : x-y|y-x x<y : (x-y) ^ ((x^y) & ((x-y) ^x)) x<=y : (x|~y) & ((x^y) | ~(y-x)) x<y : (~x&y) | ((~x|y) & (x-y)) //unsigned x<=y : (~x|y) & ((x^y) | ~(y-x)) //unsigned */ operator_1(); operator_2(); operator_3(); return 0; } void operator_1(void)

数据类型在内存中的存储

喜欢而已 提交于 2020-01-22 16:43:57
数据类型在内存中的存储 (一)类型的基本归类 (1)整形家族 char、int、short、long、long long、unsigned int等 (2)浮点型家族 (3)构造类型:数组、结构体、枚举、联合 (4)指针类型 (5)空类型:void 表示空类型(无类型),通常应用于函数的返回类型、函数的参数(不需要参数)、指针类型 整形的存储: 一个变量的创建是要在内存中开辟空间的,空间的大小根据不同的类型来决定 整形家族:存储是使用二进制 (原码,反码,补码) 内存中存储的是补码,原因:使用补码,可以将符号位和数值域统一处理,同时加法和减法也可以同时处理(CPU中只有加法器),此外,补码与原码相互转换,其运算过程是相通的,不需要额外的通行电路。 #include<stdio.h> int main() { char a=-1; signed char b=-1; unsigned char c=-1; printf("a=%d,b=%d,c=%d",a,b,c); return 0; } 这里会输出什么呢? a=-1,b=-1,c=255 原因是: 在计算机中以补码存储 a,b都是有符号字符类型,在计算机中的补码为”11111111“, 当以”%d“的形式输出时,因为之前的字符类型有符号,所以转换成整形之后,仍然有符号,即

第一个程序&C语言数字表示

僤鯓⒐⒋嵵緔 提交于 2020-01-18 23:32:48
第一个C语言程序 与hello world不同,这里是另外一个简单的C语言程序。接下来对这个程序结构进行简要介绍,使得了解C程序的基本架构。 #include <stdio.h> 这一行的意思是引入一个头文件,.h就是head的意思。一般地,在C语言或C++中,会把用来#include的文件的扩展名叫 .h,称其为头文件。 #include文件的目的就是把多个编译单元(也就是c或者cpp文件)公用的内容,单独放在一个文件里减少整体代码尺寸;或者提供跨工程公共代码。 stdio 就是指 “standard input & output"(标准输入输出) 所以,源代码中如用到标准输入输出函数时,就要包含这个头文件 也可以自己写一个.h或者.cpp文件,在其中存储一些自己写的函数,放在程序的同一文件夹下,这时也就可以include自己的文件调用自己写的函数了。 int main() printf() 本程序包含两个函数。函数就是C语言中的程序模块,当我们经常要执行一项任务时,就可以抽象出一个函数实现这个功能。函数在使用前必须声明,一般用函数原型的方法实现,这里不在赘述。 函数一般的形式: return_value_type function_name(parameter_list) 即 返回值 函数名(形参列表) int main()中,返回值就是int整型,而且main(

Java基础语法(1)

馋奶兔 提交于 2020-01-18 01:15:56
一:关键字 Java 已经赋予了特殊含义的单词 , 特点是都是 小写字母 .(Java 关键字是区分大小写的) 目前见到的关键字 : public : 公共的 , 公开的 . 权限修饰符 , 说明后面的类或者是方法谁都可以用 . class : 定义类的 . static : 静态的 , 说明这个方法可以属于类 , 可以使用类名直接调用 . void : 空 . 说明当前的方法没有返回值 . main : 不是关键字 . 约定俗成的程序的入口点 . 二 :源文件可以写多少个类定义的演示 编译的时候一个类编译成一个.class文件,多个类生成多个.class文件 /* 演示:文件名和类名不一定保持一致 类前边如果加public,那么类名和文件名必须保持一致. 否则,文件名和类名可以不一致. 此时,编译成功的结果,字节码文件的名称和类名一致. */ // public class Demo4{ //没有public修饰,表明权限是default(默认权限:包权限) //没有定义包的话,表明都在默认包中. class Demo4{   public static void main(String[] aa){     System.out.println("hello");   } } //想要被jvm虚拟机直接运行的类必须包含main方法,否则不用定义. class Demo5{  

第一章 计算机网络概论 ----1.1.2数据表示

回眸只為那壹抹淺笑 提交于 2020-01-17 06:56:01
一、数制转换 1. 其他进制转10进制 按权展开法,位数为0的可省略不计算(0乘任何数都为0),最低位为0 例: 2. 10进制转其他进制 短除法:十进制数/进制,直到商为小于1时为止,余数拼接,先得到的余数为低位有效位,后得到余数为高位有效位。 例:十进制52转换为二进制后为 110100 3.二进制转八进制和十六进制 转八进制:每三个2进制位对应一个8进制位 转十六进制:每四个2进制位对应一个16进制位 例:二进制1011010对应8进制的132,对应16进制的5A 二、原码、反码、补码、移码 深入理解请转 原码,反码,补码杂谈 1. 原码 最高位为符号位,0表示正数, 1表示负数 2. 反码 正数的反码和原码相同,负数:符号位不变,其余位取反(0变1,1变0) 3. 补码 正数的反码和原码相同,负数:反码+1 作用:补码出现是为了便于运算,可以不考虑符号位,用加法代替减法。 4. 移码 不论正负,将 补码 的符号位取反,其余不变 作用:一般会把浮点数的阶码用移码表示,便于比较大小 例: 1 -1 原码 0000 0001 1000 0001 反码 0000 0001 1111 1110 补码 0000 0001 1111 1111 移码 1000 0001 0111 1111 三、浮点数 只记录了一些考点,没有深入研究。 表示方法 : N = M ∗ R e N=M*R^{e

拼了整整一天,把这个问题搞明白了(看我上一篇文章的问题)

匆匆过客 提交于 2020-01-17 06:32:18
1.模的概念(我只讲个例子,具体的可以查数学中的 "同余模") 在日常生活中,有许多化减为加的例子。例如,时钟是逢12进位,12点也可看作0点。 当将时针从10点调整到5点时有以下两种方法: 1.将时针逆时针方向拨5格,相当于做减法: 10-5=5 2.将时针顺时针方向拨7格,相当于做加法:10+(12-5)=12+5=5 (模为 12) 2.模的运用(采用模得到 补码 ) 1. 补码 的得来:是为了让负数变成能够加的正数,so,负数的 补码 =模-负数的绝对值 比如:-1 补码 :1111 1111(10000 0000 -1得来) 当一个数要减1的时候,可以直接加 1111 1111 2.原码的得来:(负数的原码,直接把对应正数的最高位改为1) 原码能够直观的表示一个负数(能直观的把真值显示出来,如 -1为1000 0001 其中最高位表示符号位,不进行算术计算) 3.总结: 补码 相加,到第9位才舍弃(模10000 0000) 原码相加,到第8位舍弃(模1000 0000) 反码相加,到第8位舍弃(模1000 0000) 3.原码和 补码 之间转换: 1. 补码 =原码减1,再取反(便于理解) 或 补码 = 反码+1(便于描述和推理) 2.演示: 补码 =原码减1,再取反 如-1的原码1000 0001-->1000 0000(减1后)-->1111 1111(取反后) 补码