正规东莞网站建设wordpress 帖子权限
正规东莞网站建设,wordpress 帖子权限,国外好的室内设计网站,建设景区网站的目的最近在学习极客时间的课程–程序员的数学基础课。
课程地址#xff1a;https://time.geekbang.org/column/intro/143
这是第一节课程的学习笔记–有关进制的转换。 二进制
什么是二进制
十进制计数是使用 10 作为基数#xff0c;例如一个数字#xff1a;2871#xff0c…最近在学习极客时间的课程–程序员的数学基础课。
课程地址https://time.geekbang.org/column/intro/143
这是第一节课程的学习笔记–有关进制的转换。 二进制
什么是二进制
十进制计数是使用 10 作为基数例如一个数字2871它是十进制表示也就是 28712×10008×1007×1012×1038×1027×1011×1002871 2×10008×1007×1012×10^38×10^27×10^11×10^0 28712×10008×1007×1012×1038×1027×1011×100
二进制则采用 2 作为基数它的数位是2n2^n2n的形式。例如二进制数字110101它转换为十进制的表示过程如下 1×251×240×231×220×211×2032160401531×2^51×2^40×2^31×2^20×2^11×2^0 32 16040153 1×251×240×231×220×211×203216040153 根据这个思路八进制以 8 为基数和十六进制以 16 为基数等计数方法其实也是同样的道理和十进制的转换也是同样的做法。
利用 Python 代码实现二进制和十进制的转换如下所示
# 十进制转二进制的方法除2取余逆序排列, https://blog.csdn.net/shirley_sweet/article/details/73896279
def change(n):result 0if n 0: # 输入为0的情况return resultelse:result change(n // 2) # 调用自身return result str(n % 2)def decimal_to_binary(decimal_val):十进制转为二进制:param decimal_val::return:print(transfer %d to binary % decimal_val)recursion_result change(decimal_val)print(递归实现转换结果, recursion_result)def binary_to_decimal_func(val):按照定义来实现即 2^n 的形式:param val: str:return:print(original val: , val)numbers len(val)result 0for i in range(numbers):result int(val[i]) * pow(2, numbers - i - 1)return resultdef binary_to_decimal(val):二进制转十进制:param val::return:decimal2 binary_to_decimal_func(str(val))print(第二种转换二进制为十进制, decimal2)实际上Python 有内建函数可以直接实现这几个进制之间的转换比如bin、oct、hex分别表示将十进制数转换为二进制、八进制和十六进制而将其他进制转换为十进制则可以用int(val, base)函数只是需要注意输入值val必须是字符串然后设置base参数为当前输入值所用的进制比如二进制自然是设置base2代码如下所示
def binary_to_decimal(val):二进制转十进制:param val::return:# 第一种方法内建函数--int()输入值必须是字符串形式decimal int(str(val), 2)print(二进制数为: 0b%d % val)print(二进制转换为十进制为, decimal)def decimal_to_other_build_function(dec):采用内建函数将十进制转换参考 http://www.runoob.com/python3/python3-conversion-binary-octal-hexadecimal.html:param dec::return:print(十进制数为, dec)print(转换为二进制为, bin(dec))print(转换为八进制为, oct(dec))print(转换为十六进制为, hex(dec))计算机为什么使用二进制
二进制的数据表达具有抗干扰能力强、可靠性高的优点二进制非常适合逻辑运算组成计算机系统的逻辑电路通常只有两个状态即开关的接通和断开。
二进制的位操作
移位操作
二进制左移一位表示将数字翻倍即乘以 2 但左移需要注意数字溢出的问题需要考虑当前采用的变量类型位数比如是int16类型即只有 16 位数那么就要考虑当前数值的位数是否达到 16 位了
二进制右移一位则表示将数字除以 2 并使用整数商注意右移分为算术右移和符号右移这是因为符号位的原因一般符号位是0表示该数值为正数符号位是1表示该数值是负数。
对于逻辑右移需要在右移后在左边补上符号位即正数补 0负数补 1
对于算术右移就是保持符号位不动其余位数右移。
在 Java 语言中逻辑右移采用表示算术右移是表示但 Python 并没有运算符实现逻辑右移的操作。
简单的实现左移操作和算术右移操作
def left_shift(val, n):左移操作:param val::param n: 移动的位数:return:print(二进制数为: 0b%d % val)val int(str(val), 2)print(十进制数值, val)result val nprint(left shift %d, result%s % (n, result))result bin(int(result))print(left shift {}, result{}.format(n, result))def right_shift(val, n):右移操作:param val::param n::return:print(二进制数为: 0b%d % val)val int(str(val), 2)print(十进制数值, val)math_val val nprint(right shift {}, math_val{}.format(n, math_val))result bin(int(math_val))print(left shift {}, result{}.format(n, result))测试代码如下
binary_val 100101
# 输出结果是 0b1001010
left_shift(binary_val, 1)
# 输出结果是 0b10010
right_shift(binary_val, 1)逻辑操作
或参与操作的位中只要有一个是 1最终结果就是 1与参与操作的位必须都是 1最终结果才是 1 否则就是 0异或参与操作的位相同最终结果就是 0 否则是 1。
代码实现如下
def logic_operation(val1, val2):二进制的逻辑运算与、或、非以及异或操作:param val1::param val2::return:print(orginal val:{},{}.format(val1, val2))dec_val1 int(str(val1), 2)dec_val2 int(str(val2), 2)print(decimal val:{},{}.format(dec_val1, dec_val2))and_result dec_val1 dec_val2or_result dec_val1 | dec_val2not_result1 ~dec_val1not_result2 ~dec_val2different_or_result dec_val1 ^ dec_val2print(and result, bin(int(and_result)))print(or result, bin(int(or_result)))print(not result1, bin(int(not_result1)))print(not result2, bin(int(not_result2)))print(different or result, bin(int(different_or_result)))if __name__ __main__:binary_val 100101binary_val2 110100logic_operation(binary_val, binary_val2)测试的两个二进制数值分别是100101和110100输出结果如下这里非的操作会实现按位取反对于有符号数如果是正数就会变为一个负数。
orginal val:100101,110100
decimal val:37,52
and result 0b100100
or result 0b110101
not result1 -0b100110
not result2 -0b110101
different or result 0b10001上述源代码的地址是
https://github.com/ccc013/CodesNotes/blob/master/Maths/Binary.py 欢迎关注我的微信公众号–机器学习与计算机视觉或者扫描下方的二维码大家一起交流学习和进步
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/89030.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!