首页 > 其他分享 >Chap06 回顾数据类型和表达式 第五组

Chap06 回顾数据类型和表达式 第五组

时间:2022-10-25 22:25:33浏览次数:91  
标签:运算符 反码 Chap06 数据类型 补码 1111 第五组 0000 原码

Chap06 回顾数据类型和表达式

1)数据存储方式:都是以二进制方式保存,最高位是符号位,0表示正数,1表示负数。

 

在计算机数据表达中提出了三个重要概念。

原码 反码 补码  

原码:就是人所能理解的二进制形式,如在八位数表示中,1就是0000 0001;而-1则是1000 0001(正数原码反码补码都是一样的,而负数是不一样的。)                      

反码:就是在原码基础上按位取反,符号位不变,其他位上全部取反。

补码:在反码基础上加上1.

那么他们的意义是什么呢?

在加减运算过程中,会发现如果是正数与负数的运算,用原码便会出现错误,-1+1=0,但原码计算会得到1000 0010,为-2?这明显是错误的。

所以我们引入反码,-1反码为1111 1110与1 反码0000 0001得到1111 1111,得到的结果为反码,所以我们将1111 1111 按位取反得到他的原码,可得1000 0000为(-0);这样结果就对了。

But 在一些正负数计算中,运用反码计算还是会错误。例如-1 反码为1111 1110和2 反码为0000 0010,二者相加应为1,相加起来不为1,那该咋办?

举个简单的例子,-1+1=0,我们已经知道1的反码0000 0001,那么可以想一下,什么样的八位数加上0000 0001是0?可以知道这个数就是1111 1111,那么再多举几个一样的例子,便可以判断出来规律啦,就是原码按位取反+1,便是这个数字的补码啦。

而为了保证正确,计算机一般都是用负数补码进行运算,虽然我们没办法一下子反应过来这个补码原码是怎么样的,但毕竟运算结果是对的,所以我们采用这个。

Example:很多人会对127+1=-128感到疑惑。

那么现在我们来算一下 127原码为0111 1111,而1的补码为0000 0001相加,数字为1000 0000,一定是一个负数的补码,那我们反推它的原码,加1按位取反,则为1000 0000,这个负数就是-128.

 

2)运算符优先级

 

 

大致就是!(逻辑运算)>算数运算符>位移运算符>关系运算符>位运算符>逻辑运算符>判断?>赋值运算符>,

 

说一些我之前一直搞不懂的东西。

if(a),若a不为0则为真,可运行这个判断语句。

If(!a),若a、为0为真,运行这个判断语句。

3<=x<=5,等价为(3<=x)<=5,而(3<=x)是逻辑判断,不是1 就是0,肯定会小于等于5,所以这个判断的语句的值恒为1。

3)位移运算运用

 

1)本章节学习难点无疑就是理解问题,有时候理解不到位是根本无从下手,运算符优先级不理解,在学习别人的代码过程中就会遇到很多困难,没有正确利用^ ,~,&,|导致结果不准确,以及对二进制原码反码补码计算错误等,都是一些可以很快解决的理解性小问题,但在这个章节有一个比较大的疑问就是不知道什么时候该去运用位运算来解决问题,不知道学了这块内容对未来写代码有什么作用。

 

关于应用,除了PTA上能够指定哪一位数置1 或置0;指定哪几位二进制转换成十进制进行加减运算,指定取特定位的数字,还有一些更实际的应用。               

 

第一个便是对奇数偶数的判断,很简单,可以直接对最后一位进行是0还是1的判断,因为奇数偶数只需要看最后一位能否被2整除,根据二进制书写可知道除了第一位都是2的多少多少次方,一定能被2整除,所以只要看最后一位就好了,若是0,则为偶数,若是1,则为奇数。则可将二进制数字&1,即可。   

Int isodd(int x)

Return x&1; 

}

 还有一个便是数值交换(悄悄发现一个规律:若a^b=c;a^c=b,b^c=a)

 (x)^=(y);

 (y)^=(x);

 (x)^=(y);这样就可以交换ab数值啦,还不用中间变量。

还有很多运用:在某一位数上置1或者置0或是按位取反。

其实已经有一定套路了

若要在某一位(设第b位)上置1

int n;

n&=(~(1<<b));

若要在某一位上(设第b位)上置0

Int n;

n|=(1<<b)

若要某一位取反

n=(n>>b)&1;

判断为0或1,为0则做置0操作,为1则作置1操作。

2)数据返回类型和自动转换

 

 

低数据类型自动转换为高数据类型,(自动类型转换)

整型类型、浮点类型

 

整型类型 : 基本类型(int)、短整型(short int)、长整型(long int)、*双长整型(long long int)、字符型(char)、*布尔型(bool)

 

浮点类型:   {单精度浮点型(float)、双精度浮点型(double)、复数浮点型(float_complex、double_complex、long long_complex)    

原文链接:

Csdn 官网

https://blog.csdn.net/m0_69152943/article/details/124216556

 

 

 

标签:运算符,反码,Chap06,数据类型,补码,1111,第五组,0000,原码
From: https://www.cnblogs.com/computer666/p/16826571.html

相关文章

  • 二、python基本数据类型
    一.字面量代码中,被写在代码中的固定的值,称之为字面量Python常用6种值(数据)类型字符串(string):又称文本,是由任意数量的字符如中文、英文、各类符号、数字等组成。......
  • mybatis typehandler适配postgresql中的point数组数据类型
    mybatistypehandler适配postgresql中的point数组数据类型importlombok.extern.slf4j.Slf4j;importorg.apache.ibatis.type.BaseTypeHandler;importorg.apache.ibat......
  • SQLite REAL数据类型值比较问题
    SQLiteREAL数据类型值比较问题数据类型是REAL的字段,where条件where字段=值查询时,可能查询结果为空,使用whereabs(字段-值)<0.00001查询例子表结构字段名称......
  • 基本数据类型
    标准数据类型Python3中有六个标准的数据类型:Number(数字)String(字符串)List(列表)Tuple(元组)Set(集合)Dictionary(字典)Python3的六个标准数据类型中:不可变数据(3个):Num......
  • Go | 基本数据类型的相互转换
    基本数据类型的相互转换Go在不同类型的变量之间赋值时需要显示转换,不能自动转换基本语法表达式T(v):将值v转换成类型TT就是数据类型:int32,int64,float32...v就是......
  • Redis的数据类型详解
    作者:IT邦德中国DBA联盟(ACDU)成员,目前从事DBA及程序编程(Web\java\Python)工作,主要服务于生产制造现拥有Oracle11gOCP/OCM、Mysql、Oceanbase(OBCA)认证分布式TBase\TDSQL数......
  • 针对特殊数据类型JSON.parse()无法完整实现深拷贝的情况下的解决方法
    //判断数据类型functiontypeOf(obj){consttoString=Object.prototype.toStringconstmap={'[objectBoolean]':'boolean','[objectNumber]':'number','[o......
  • 数据类型 varchar 和 varchar 在 modulo 运算符中不兼容处理方法
    用Ascii码替代   ......
  • Python的数据类型详解
    1.字符串及其常用函数1.字符串中访问指定的值字符串中访问指定的值1.用[i]下标表示,从左到右顺序从0开始,从右到左顺序从-1开始2.变量[头下标:尾下标],截取......
  • MySQL中数据类型宽度
    一、数据类型的取值范围和宽度字段类型对应的取值范围:类型字节有符号取值范围无符号取值范围TINYINT1-128~1270~255SMALLINT2-32768~327670......