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