进制转换、位运算、逻辑运算

一.  计算机中的进制表示
 二进制:0-1表示,满2
1
八进制:0-7表示,满8
1
十进制:0-9表示,满10
1
十六进制:0-9A~F表示,满161

如何计算7的二进制?(注意,这里710进制。)

 

二进制如何转十进制呢?

 

十进制转八进制如何转呢?

十进制如何转十六进制呢?

负数的二进制如何表示呢?(取反+1)

int 类型的数据在内存中占32个二进制位即  4个字节,一个字节(byte)等于8个二进制位,6的二进制位为110,补齐23位为:

总结:八进制三位表示一位,所以八进制一位的最大值为7,即111=7,而十六进制四位表示一位,所以十六进制一位的最大值为15,即1111=15

二.  左移<<

定义:

(将某个数的二进制位向左移动n个二进制位,并将已经移出的二进制位舍去,并在最右端也就是最低位补n个零,得出最新的结果)

书写:3<<2表示将3所表示的2进制数向左移动2个二进制位。

步骤:

3<<2

1.      先将3转化为32位的2进制表示形式

2.      将转化出来的二进制数向左移动2个二进制位

3.      然后在最右端也就是最低位空出来的位置补充20

4.      算出最终结果

 

计算:

1.      计算3<<2的结果

2.      计算3<<1的结果

3.      计算3<<3的结果

根据以上的出左移的结论是其实就是用被移数乘以2的移动位数的次幂,而且往左移动越多,结果越大。

 

三.  右移>>

定义:

(将某个数的二进制位向右移动n个二进制位,并将已经移出的二进制位舍去,并在最左端也就是最高位补n个与原来高位一样的数,得出最新的结果)

书写:6>>2表示将6所表示的2进制数向右移动2个二进制位。

步骤:

6>>2

5.      先将3转化为32位的2进制表示形式

6.      将转化出来的二进制数向左移动2个二进制位

7.      然后在最右端也就是最低位空出来的位置补充20

8.      算出最终结果
计算方式和左移一样,区别在于,左移空缺位置固定是补充0,而右移空缺位置补充的数根据原来最高位的数来定,假如原来最高是1,则全部补1,否则补充0

示例:

通过计算,6>>2 = 1      6>>1=3

根计右移计算结果,可以得出规律,其实就是将被移数除以2的移动数的次幂,而且往右移动越多,结果越小(因为都将有效位置都移除掉了)

注意:<< >>的计算速度是最快的,比其他任何计算方法都块。

 

四.  异或^(0=false1=true)

 

false

^

false

=

false

true

^

false

=

true

false

^

true

=

true

true

^

true

=

false

规律:两边相同为false,不同为true

计算6^5 =3

6的二进制表示形式为 110

5的二进制表示形式为 101

异或运算:1表示true0表示false

7^4^4=7

7^5^5=7

7^8^8=7

根据上面3个的计算结果可以的出结论:一个数异或同一个数两次,结果还是那个数,这个特性可用来加密文件,就是将某一个文件用一个数进行异或一次之后,将不是原来的数据性质了,就不能使用了,那么再用这个数异或一次就被解密了,还原到原来的数了。

 

 

五.  与&运算符(0=false1=true)

false

&

true

=

false

false

&

false

=

false

true

&

true

=

true

true

&

false

 

false


6&3 =2

六.  或|运算符号(0=false1=true)

false

|

true

=

true

false

|

false

=

false

true

|

false

=

true

true

|

true

=

true

6|5 =7

         

七. ~反码


~6  = -7

 

八.  练习:

1.      请以计算机的角度用一种效率最高的方法计算2*8的结果。
利用左移的方法:2<<3    

2.      int m = 8 , n =3 交换m,n的值。

A.      通过第三方变量int temp;

int temp  ;

temp = n;

n = m;

m = temp;

B.      不用第三方变量()
n = n+m;

m = n - m

n = n – m;

这种方式存在局限性,如果nm的值比较大的时候,就超出int类型的空间范围,容易损失精度。

C.      采用异或的特性(技巧性的方法,大众阅读性差)
n = n ^ m;

m = n^ m; --> (n^m) ^m =n;

n = n^m; -->n^(n^m)=m;

 

 

九.  在程序中如何计算出一个数的十六进制表现形式?
0000 0000 0000 0000 0100-1100 1110 0110

     0000 0000 0000 0000 0100 1100 1110 0110

&  0000 0000 0000 0000 0000 0000 0000 1111

--------------------------------------------------------------------------

     0000 0000 0000 0000 0000 0000 0000 0110  
--> 以上& 15 后,单独的取出了十六进制数的第一个四位

那如果要单独取出十六进制数的第二个四位怎么办?

-->可以将原来数字右移4为再 & 15就可以了

-->示例: 60的十六进制:
int  n1 = 60&15 ; int temp = 60>>4 ; int n2 = temp & 15;

-->十六进制数中不能以10,11,12,13,14,15表示,只能以A~F来表示,那么

在程序中怎么去的到这个字母表现?

例如: 14怎么去的它的字母?--> (char)14-10+'A';

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值