day7homeword

在计算机编程中,整数可以通过十进制、二进制、八进制、十六进制来表示

1.进制

  1. 十进制
基数:0,1,2,3,4,5,6,7,8,9
进位:逢10进1
位权:123  = 100 + 20 + 3  =  1*10**2 +2*10**1+3*10**0
  1. 二进制
基数:0,1
进位:逢2进1
100(2) == 4(10)
权位:101 =  1*2**0 + 0*2**1 + 1*2**0
  1. 八进制
基数:0,1,2,3,4,5,6,7
进位:逢8进1
位权:123(8) = 3*8**0  +  2*8**1 + 1*8**2 = 83
  1. 十六进制
基数:0-9,a/A - f/F  --  a/A(10),b/B(11)..f/F(15)
1f ,ff,a00bf
进位:逢16进1
位权:123(16) = 3*16**0 + 2*16**1 + 1*16**2 = 291

1. 程序中怎么表示不同进制的数

在程序中直接写的数字都是10进制

num = 110   # 这是一个十进制数
二进制
 0b + 二进制数
num = 0b110
print(bin(100))
print(bin(0x256df))  #  获取十六进制对应的二进制
# 八进制
# 0o + 八进制数、
num = 0o764
print()

十六进制

 0x + 十六进制
num = 0x5fd
print(num)
print(hex(1997))
print(hex(175))

计算机存储数据只能存储数字数据,而且存的是数字的补码。
计算机对数据进行运算的时候是使用干部吗进行运算的,将数据从计算机中读出来看到的是原码

原码:
符号位 + 真值
说明:
符号位 - 最高位用0表示正数,1表示负数
真值 - 去掉正负,数字对应的二进制

100的原码:01100100
-100的原码:11100100

反码:
正数的反码:就是原码
负数的反码:原码的符号位不变,其他的位数取反

-100的反码:10011011

补码:
正数的补码:就是原码
负数的补码:反码+1

100补码:01100100
-100的补码:10011100

练习:-50

 原码: 1110010
 反码:1001101
 补码:1001110

为什么计算机要存补码?
因为计算机只有加法器,没有减法器

3 - 2  -->  3 + (-2) = 1
2 - 3 -->  2 + (-3) = -1
3的原码:011
-2的原码:110
# 存原码:
3-2 = 011 + 110 =001 = 1
2 - 3 = 111+010 = 001 = 1

位运算:&(按位与)|(按位或)~(按位取反) ^(按位异或) >>(右移) <<(左移)
数字1 & 数字2 ---> 每一位上的数都为1结果就是1,有0就是0

0111(补)   & 1101(补)  -->0101(补)
print(3 & 2)   #  0011 & 00150 --> 0010

应用:判断一个数的奇偶性(如果一个数的二进制的最低位是1就是奇数,否则就是偶数)

num % 2 == 0-->  num是偶数
num & 1 == 0 -->  num是偶数
num & 1 == 1 -- > num是奇数

数字1 | 数字2 :只要有1结果就是1,两个都为0结果才是0
特点:和1或,置1

print(3 | 2)  # 0011 |0010 = 0011

~数字:将数字上的每一位取反
~1 = 0

数字1^数字2 : 相同为0,不同为1
1^1 = 0
1^0 = 1
0^1 = 1
0^0 = 0
应用:加密
数字1<>n:数字1右移n位   数字1//2**n
应用:快速乘2的次方/除2的次方

你可能感兴趣的:(day7homeword)