首页 > 其他分享 >补码与反码(附运算优先级)

补码与反码(附运算优先级)

时间:2023-09-08 10:55:54浏览次数:39  
标签:优先级 补码 ----------------- 负数 反码 正数 原码

2023-08-30 16:56:00

我们都知道在计算机存储的时候,有符号的数都会用最高位作为符号位。

参考:什么是原码、反码和补码

原码

就是正常的二进制数,把最高位改成符号位(0为正数,1为负数)。

正数计算不会有问题:

5+2:

 0 0 0 0 0 1 0 1
+        0 0 1 0
-----------------
 0 0 0 0 0 1 1 1

=7

反码

正数的反码就是原码,负数的反码是把原码中除符号位以外的所有位(数值位)取反

为什么要引入反码呢?因为计算机中直接用原码加减只能解决正数加减,而带负数加减如果用原码就会出现很大的错误,如:

-56-1:原码

 1 0 1 1 1 0 0 0
-              1
-----------------
 1 0 1 1 0 1 1 1

=-55???

那如果我们用反码运算:

-56-1:反码

  1 1 0 0 0 1 1 1
 -              1
-----------------
  1 1 0 0 0 1 1 0

=-57

没有任何问题。

补码

正数的补码是原码,负数的补码是反码加 1。

为什么要搞出一个奇奇怪怪的补码?

因为用反码做负数跨 0 运输也会错。

如:-3+5:反码

 1 1 1 1 1 1 0 0
+        0 1 0 1  
-----------------
 0 0 0 0 0 0 0 1 

=1??

用补码:

 1 1 1 1 1 1 0 1
+        0 1 0 1
----------------- 
 0 0 0 0 0 0 1 0

正确。

不仅如此,如果用反码,0的表示就有了歧义,+0反码00000000,-0反码11111111,而且还浪费一个位置,但是用补码则不然。这也是为什么 int 的范围是 \([-2147483648,2147483647]\),负数可以多表示一个,而 \(-2147483648\) 在 4 字节整型中并没有原码和反码,只有补码。

补码变原码:

  • 先减1再取反
  • 先取反再加1

个人认为第二个好记。

注:

进行位运算时用的都是补码,所以 OIer 们判断是不是 \(-1\) 常用 ~p,如果是 -1 的话,结果就是0,也是因为 -1 的补码是全 1。

c++运算符优先级归纳

标签:优先级,补码,-----------------,负数,反码,正数,原码
From: https://www.cnblogs.com/NBest/p/17686996.html

相关文章

  • C++运算符优先级
    所有(可能)运算符共分为18级。第1级运算符含义::作用域解析运算符第2级运算符含义()函数调用()值构造,即type(expr)[]数组下标->间接成员运算符.直接成员运算符const_cast专用的类型转换dynamic_cast专用的类型转换re......
  • 补码和移码
       ......
  • PostgreSQL的参数:用户应了解的作用域和优先级
     PostgreSQL允许用户在不同的作用域设置参数,同一个参数可以在不同的地方用不同的方法设置。这可能会产生冲突。有人可能想知道为什么某些更改没有生效,因此了解/收集设置的作用域和优先级很重要。这里将试图列出用户可用的选项,并按照优先级递增的顺序排列。目的是为用户提供一个......
  • Flink 1.17教程:并行度设置&优先级
    并行度设置&优先级并行度(Parallelism)并行度的设置在Flink中,可以用不同的方法来设置并行度,它们的有效范围和优先级别也是不同的。代码中设置我们在代码中,可以很简单地在算子后跟着调用setParallelism()方法,来设置当前算子的并行度:stream.map(word->Tuple2.of(word,1L)).setParall......
  • Python运算符及其优先级顺序总结
    Python是一种被广泛使用的高级编程语言,它简单易学、功能强大,在Python语言中,运算符用于执行各种数学和逻辑运算的符号,不同运算符的优先级也各不相同,今天老男孩教育小编就带大家了解一下,请看下文:1、括号运算符(())括号运算符具有最高的优先级,它用于改变表达式的计算顺序......
  • 13、从0到1实现SECS协议之优先级队列(SECS-I)
    13、从0到1实现SECS协议之优先级队列(SECS-I)逻辑和HSMS协议中的优先级队列一样,只不过存储的数据变了而已。1、并发安全的优先级队列packagequeueimport( "secs-gem/common" "secs-gem/secs/packets" "secs-gem/secsgem" "container/heap" "context" "sync......
  • Python 运算符优先级
    Python运算符优先级所谓优先级,就是当多个运算符同时出现在一个表达式中时,先执行哪个运算符。例如对于表达式a+b*c,Python会先计算乘法再计算加法;b*c的结果为8,a+8的结果为24,所以d最终的值也是24。先计算*再计算+,说明*的优先级高于+。Python支持几十种运算符,被划分......
  • 线程优先级
    线程优先级Java提供一个线程调度器来监控程序中启动后进入就绪状态的所有线程,线程调度器按照优先级决定应该调度哪个线程来执行。线程的优先级用数字表示,范围从1~10.Thread.MIN_PRIORITY=1;Thread.MAX_PRIORITY=10;Thread.NORM_PRIORITY=5;使用以下方式改变或......
  • JavaSE(2)(简单了解idea, 项目结构,运算符,数据转换,原反补码)
    JavaSE(2)(简单了解idea,项目结构,运算符,数据转换,原反补码)p28idea项目结构project项目 > module模块 > package包 > class类拿微信举例,微信就是项目,它下方的四大功能(微信,通讯录,发现,我)就是模块,一个项目是包含一个或多个模块的.以第一个微信模块为例,我们......
  • 7 CSS选择器优先级
    7选择器优先级所谓CSS优先级,即是指CSS样式在浏览器中被解析的先后顺序。样式表中的特殊性描述了不同规则的相对权重。/*!important>行内样式>ID选择器>类选择器>标签>通配符>继承>浏览器默认属性1内联样式表的权值最高style=""1000;......