补码

原码、反码、补码,计算机中负数的表示

霸气de小男生 提交于 2019-11-27 10:12:14
原码:将一个整数,转换成二进制,就是其原码。 如单字节的5的原码为:0000 0101;-5的原码为1000 0101。  反码:正数的反码就是其原码;负数的反码是将原码中,除符号位以外,每一位取反。 如单字节的5的反码为:0000 0101;-5的反码为1111 1010。  补码:正数的补码就是其原码;负数的反码+1就是补码。 如单字节的5的补码为:0000 0101;-5的原码为1111 1011。   在计算机中,正数是直接用原码表示的,如单字节5,在计算机中就表示为:0000 0101。 负数用补码表示,如单字节-5,在计算机中表示为1111 1011。 这儿就有一个问题,为什么在计算机中,负数用补码表示呢?为什么不直接用原码表示?如单字节-5:1000 0101。    我想从软件上考虑,原因有两个  1、表示范围   拿单字节整数来说,无符号型,其表示范围是[0,255],总共表示了256个数据。有符号型,其表示范围是[-128,127]。   先看无符号,0表示为0000 0000,255表示为1111 1111,刚好满足了要求,可以表示256个数据。   再看有符号的,若是用原码表示,0表示为0000 000。因为咱们有符号,所以应该也有个负0(虽然它还是0):1000 0000。   那我们看看这样还能够满足我们的要求,表示256个数据么?   正数,没问题

原码、反码和补码

空扰寡人 提交于 2019-11-27 05:04:18
​ 计算机中的符号数有三种表示方法,即原码、反码和补码。三种表示方法均有符号位和数值位两部分,符号位都是用0表示“正”,用1表示“负”,而数值位,三种表示方法各不相同。 1.原码 原码,用8位二进制表示一个数,数值前面增加了一位符号位(即最高位为符号位):正数该位为0,负数该位为1。例如+7的原码为00000111,-7的原码就是10000111。 2.反码 正数的反码与其原码相同;负数的反码是对正数逐位取反,符号位保持为1。 例如-5的原码为10000101,-5的反码为11111010。 3.补码 1.正整数的补码与原码相同 。 2.一个负整数的原码与其补码相加,和为模。求负整数的补码,将其原码除符号位外的所有位取反(0变1,1变0,符号位为1不变)后加1。-1的原码为10000001,其补码为11111111。 3.在计算机系统中,数值一律用补码来表示和存储。原因在于,使用补码,可以将符号位和数值域统一处理;同时,加法和减法也可以统一处理。此外,补码与原码相互转换,其运算过程是相同的,不需要额外的硬件电路。 来源: https://www.cnblogs.com/notfind/p/11345335.html

嵌入式软件工程师面试(3)

女生的网名这么多〃 提交于 2019-11-27 03:46:06
1、Norflash与Nandflash的区别 (1)NAND闪存的容量比较大 (2)NORflash采用内存的随机读取技术。各单元之间是并联的,对存储单元进行统一编址,所以可以随机访问任意一个字。既然 是统一编址,NORflash就可以芯片内执行,即应用程序可直接在flash内运行,而无需先拷贝到RAM。 (3)NOR flash有更快的读取速度, NAND flash有更快的写、擦除速度。 2、反码:对原码除符号位外的其余各位逐位取反就是反码 补码:负数的补码就是对反码加1 正数的原码、反码、补码都一样 3、内存管理MMU的作用 其功能是把虚拟地址映射为物理地址。 4、ROM与RAM ROM是只读存储器,掉电不丢失。 RAM是读写存储器,掉电丢失。 5、signed char 的取值范围-128~127. 6、关键字static的作用是什么 static用来修饰一个局部的变量的时候, 生命域是全局的 作用域是局部的 static用来修饰一个模块内的(某一个C的源程序文件)全局变量的时候 生命域不变 作用域减小,只在本模块内有效 static用来修饰一个函数的时候 作用域减小,只在本模块内有效 来源: https://blog.csdn.net/huhuandk/article/details/99330908

python学习笔记之数据储存

霸气de小男生 提交于 2019-11-27 00:18:26
思考:为什么使用计算机?为了存储数据,处理数据思考:数据存到哪里?数据存在内存条思考:内存是怎么存储数据到?首先要弄清楚怎么存储数字内存:是计算机存储的介质抽象内存:一个开光,有两种状态,一种对应1,一种对应0。把8个开光放在一起,可以称这间房间为一个字节,一个开光代表一位。每个房间都有门牌号,我们把它看作为地址。把无数个房间罗列起来组成摩天大楼,可以把摩天大楼看作为内存。单位: 1bie 8bie == 1字节 1024字节 == 1K 1024k == 1M 1024M == 1G 1024G == 1T进制: 二进制 逢2进1 0 1 1 + 1 = 10 八进制 逢8进1 0 1 2 3 4 5 6 7 1 + 7 = 10 十进制 逢10进1 0 1 2 3 4 5 6 7 8 9 1 + 9 = 10 十六进制 逢16进1 0 1 2 3 4 5 6 7 8 9 a b c d e f 1 + f = 10进制转换: 十进制转二进制 公式:倒除法,余数逆序 二进制转十进制 公式:当前数字(0,1)乘以2的位数次方,再相加 八进制转二进制 公式:「一转三位」八进制的一位相当于二进制的三位 ,计算时按十进制转换,不足三位高位补0 二进制转八进制 公式:「三位一取」从低位开始,每三位得到一个八进制数字, 最后高位不足则补0 十六进制转二进制 公式:「一转四位

基础位运算基本原理和应用

十年热恋 提交于 2019-11-26 21:08:16
微信公众号 位运算是编程语言的基础,在看源码的时候会看到很多位运算代码,但是在项目代码中很少会看到位运算。因为应用代码中,有很多判断和计算都可以直接用数值的判断和计算完成,没有必要去用位运算,以至于这些基础的东西慢慢用的越来越少,慢慢也就忘了。导致的一个结果就是看源代码很费力,因为大量的位运算逻辑,看不懂。 作为程序员感觉数据位运算是非常必要,有点如下: 看源码时能够更好的理解 位运算更接近计算机的习惯,执行的效率会更高 装逼利器,在项目中使用位运算,体现逼格 N种基本的位运算 位运算 -- 与运算符(&) 运算规则: 操作数1 0 0 1 1 操作数2 0 1 0 1 与运算 0 0 0 1 规则总结:只有两个操作数都是1的时候运算结果才为1,其他都是0。换句话说就是只要包含0就是0。 运算如下: 位运算 -- 或运算符(|) 运算规则: 操作数1 0 0 1 1 操作数2 0 1 0 1 或运算 0 1 1 1 规则总结:只有两个操作数都是0的时候运算结果才为0,其他都是1。换句话说就是只要包含1就是1。 运算如下: 位运算 -- 非运算符(~) 运算规则: 操作数 1 0 或运算 0 1 规则总结:取反操作,1变0,0变1。 位运算 -- 异或运算符(^) 运算规则: 操作数1 0 0 1 1 操作数2 0 1 0 1 或运算 0 1 1 0 规则总结:操作数相同

二进制中的原码、反码和补码的概念

帅比萌擦擦* 提交于 2019-11-26 19:30:16
本篇文章介绍了原码、反码和补码的概念,其次介绍了正负数的原码、反码及补码的转换。 机器数与真值 机器数 一个数的二进制表现形式。其中二进制最高位表示正负,1表示负数,0表示正数。比如 5(十进制)-> 00000101(二进制) -5(十进制)->10000101(二进制) 真值 用“+”、“-”号加绝对值来表示数值的大小,用这种形式表示的数值。比如下面的+5,-5。 5(十进制)-> 00000101(二进制)-> +000 0101=+5 -5(十进制)->10000101(二进制)-> -000 0101 =-5 总结一下,真值是带有正负号的数值,机器数是用0或1来表示正负号的数值。 原码、反码和补码的概念 先说结论: 正数的原码、反码、补码都相同; 负数的原码:最高位为1,其余位为真值的绝对值; 负数的反码:在原码的基础上,符号位不变,其余位按位取反; 负数的补码:在原码的基础上,符号位不变,其余位取反,最后加1;也就是在反码的基础上加1。 原码 原码:第一位表示符号,其余位表示值。举例说明 +12-> 0000 1100 (原码) -12-> 1000 1100 (原码) 对应的取值范围就是 [1111 1111,0111 1111] ,范围是[-127,127] 反码 正数的原码、反码、补码都相同; 负数的反码:在原码的基础上,符号位不变,其余位按位取反。举例说明:

C/C++:原码、反码和补码

╄→尐↘猪︶ㄣ 提交于 2019-11-26 14:57:51
正数的原码、反码和补码是一模一样的。 负数的反码的符号位跟原码一样,但其余各位取反。 负数的补码是其反码的最末位加1得到,即原码取反加1. 补码的补码就是原码。 浮点数的存储格式随着机器的不同而不同: 单精度32bits: 双精度64bits: 转载于:https://www.cnblogs.com/lucas-hsueh/p/3734248.html 来源: https://blog.csdn.net/weixin_30458043/article/details/98904039

位运算

空扰寡人 提交于 2019-11-26 02:49:12
题引 ** 题引是不存在的 ** 1.关于原码与补码 原码:由十进制数转化为二进制数,如10:00001010( 偷懒就8位 ),-25:00011001. 补码:正数的补码就是原码,负数的补码为其原码按位取反后加一(符号位不变) 位运算是由补码进行计算!! 例子(负数) -25 原码:00011001 过程: 00011001->11100110->11100111(补码) 2.左移(<<)和右移(>>) 左移:符号位不变,右边补0(数量由具体例子决定) 右移:符号位不变,右边去除部分为(数量有具体例子决定)(如果符号位为0,左边补0;符号位为1,左边补1) 例子 1.正数的左移(10) 10<<3:00001010(补码)->01010 000 (80) 2.正数的右移(10) 10>>3:00001010(补码)-> 000 00001 010 (1) 3.负数的左移(-25) -25<<3:11100111(补码)-> 1 00111 000 (符号位不变)->100111011(减1)->011000100(取反)(-196) 4.负数的右移(-25) -25>>3:11100111-> 111 11100 111 *->11111011->0000100(-4) 3.与(&),或(|),异或(^) 三者都为补码运算 &:同为1才为1 | :同为0才为0 ^:相同为0

c#基础之操作符和控制流

坚强是说给别人听的谎言 提交于 2019-11-25 16:52:21
1.1前后缀递增操作符 int x = 123; int a = x++;//a=123,但是x变成了124. int b = ++x;//b=125 如上述代码,无论是前缀操作符还是后缀操作符,最终都会给x递增加1,但是在赋值的时候,前缀操作符是先加一再赋值,后缀操作符是先赋值再加一。 1.2 算术运算符:+ - * /% 关系运算符: == != > >= < <= 逻辑运算符: && 与,||或,!非,XOR(^) &&和||是双操作数,!是单操作数 1.3 逻辑求反操作符! 它的作用可以反转一个bool数据类型的值 eg:bool v=false; bool t=!v;//t=true XOR(^)是异或操作符,如果用于两个布尔操作数,只有在2个操作数中仅有一个为true的情况下才返回true,其他情况下都是false。 1.4 条件操作符(三元操作符) a>b?a:b 1.5空接合操作符?? 表示如果这个值为空,就使用另一个值,注意,只适合于null值,不适合空字符串。 string e = null; //e=12。e为null,则e的值为12 e= e ?? "12"; string s = string.Empty; //s=string.Empty;因为??只用于空值null s = s ?? "12"; 1.6null操作符 (?.)--------注意,这是c