xju浮点数加减法舍0入1

步骤如下:

1.对阶

对阶目的是使阶码相同,遵循阶码小的向阶码大的看齐,使阶码小的尾数右移,每右移一位(右移相当于除2,左移相当于乘2),阶码加 1 1 1
举个例子:
两浮点数: X = 0.1101 × 2 01 X = 0.1101 \times 2 ^{01} X=0.1101×201 Y = ( − 0.1010 ) × 2 11 Y = \left( -0.1010 \right) \times 2 ^{11} Y=(0.1010)×211
首先写出两浮点数的补码表示:(负数:真值按位取反。用双符号位表示可以观察阶符来判断是否溢出)
[ X ] 补 = 00 , 01 ; 00.1101 \left[ X \right] 补 =00,01;00.1101 [X]=00,01;00.1101
[ Y ] 补 = 00 , 11 ; 11.0110 \left[ Y \right] 补 =00,11;11.0110 [Y]=00,11;11.0110
求阶差:用小的阶码减大的阶码即可,求得-2,因此将X的尾数右移2位,其阶码加2。
[ X ] 补 = 00 , 11 ; 00.0011 ( 01 ) \left[ X \right] 补 =00,11;00.0011(01) [X]=00,11;00.001101
很多读者可能会疑惑: 为什么X的尾数右移2位后,移出去的数字还要用括号记录下来。
原因: 如果将XY的尾数相加后没有满足规格化的条件,从而进行规格化,需要将XY相加得到的尾数进行左移(左规)时,这时候之前移出去的数字又利用了起来,从而减小了误差。如果没有记录之前移出去的数字,那么左移时低位会补0,显然如果记录了数字比如01,总比00造成的误差更小

对阶的时候右移,需要进行舍0入1判断。入1 是在***最低有效位***进行加1
对于无符号数,右移之后高位补0;对于有符号数,符号位一起移动,正数高位补0,负数高位补1
対阶的过程中右移2位,不是右移一次就判断一次。是右移结束后看最高位,如果一次一次的移就不存在看最高位了

2.尾数求和

在这里插入图片描述

3.规格化

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4.舍入(舍0入1,仅仅针对右移,别问为什么)

在对阶和右规的过程中可能会将尾数的低位丢失
引起误差,影响精度。为此,引入舍入来提高尾数的精度。常用舍入方法有以下两种。
在这里插入图片描述
在这里插入图片描述

可能读者会疑惑:尾数溢出怎么判断?为什么这里进行的是右规?
尾数溢出就是尾数的双符号位不相同,嗯,右规的话,背住就好。
记住假溢出时候,符号位的最高位是正确的符号位。

5.溢出判断

记住,只看阶码的符号位
在这里插入图片描述

练习题


答案如下:(字迹不好将就看看)
在这里插入图片描述

  • 12
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
以下是一个Python编写的RSA加密工具类,可以使用指定的公钥和私钥进行数据加密和解密。 ```python import base64 from Crypto.PublicKey import RSA from Crypto.Cipher import PKCS1_v1_5 class RSAUtil: def __init__(self, public_key=None, private_key=None): if public_key: self.public_key = RSA.importKey(public_key) if private_key: self.private_key = RSA.importKey(private_key) def generate_key(self, bits=2048): self.key = RSA.generate(bits) self.public_key = self.key.publickey() self.private_key = self.key def export_public_key(self): return self.public_key.exportKey().decode('utf-8') def export_private_key(self): return self.private_key.exportKey().decode('utf-8') def encrypt(self, data): cipher = PKCS1_v1_5.new(self.public_key) ciphertext = cipher.encrypt(data.encode('utf-8')) return base64.b64encode(ciphertext).decode('utf-8') def decrypt(self, ciphertext): cipher = PKCS1_v1_5.new(self.private_key) data = cipher.decrypt(base64.b64decode(ciphertext), None) return data.decode('utf-8') ``` 使用示例: ```python public_key = """-----BEGIN PUBLIC KEY----- MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDQ8QuKZ4kbwYpSfS+/x7c9j3q m7C4Jz4hF7QZbWkR+Yw5OfNlJN7V9yWdFyKv5/5a5e/7p8W+5g5w6x+U6H7A9Xy 6XOgB+OznPzjL6LZMcgJZM6aKj+Q2QJXOyRrmtURjI3DKb3L+1s3qE0GwX9AxRj OOJQ2F+I6rT8CnG3qQIDAQAB -----END PUBLIC KEY-----""" private_key = """-----BEGIN PRIVATE KEY----- MIICeAIBADANBgkqhkiG9w0BAQEFAASCAmIwggJeAgEAAoGBANDxC4pniRvBilJ 9L7/Htz2PeqbsLgnPiEXtBltaRH5jDk585ySTe1fclnRcir+f/lrl7/unxb7mDn DrH5TofsD1fLpc6AH47Oc/PMsotkxyAlkzpoqP5DZAlc7JGua1RGMyNwyW9y/tb N6hNBsF/QMUYziUNhfiOq0/Apxt6kAgMBAAECgYB6xJU+HcOQkFTe6LfZwzJZP6 M+0X9R6jJvI2+1rI0rC8BZqJj1f+Gdp0zB72yU9X+U6uuJU6NcU6xZJ/l2bI6+P D0i/jz/9y+XmVksjTupm2n0JrW+LzqY3s3sMz7Jqu0Wf9X7El3q+3uK7VklGmxRZ Y37hJ1t2Qz0j4OEx9QJBAOcPzKjgV+JWJ5Z5wGZfz5a1+EpMsfW2Ji7KT/ak5zL EFa+D5lGw5Y5K5zg/UfjFtW8uV7q3t+G5V7S5bRmBvECQQDQ1QOT4n4BhrE0oIb Lr1Q2rT/GJ0/cZ6Y1qIzEBZiJc0oUkXyvPc6Ugwi6U1x6uvFQZwY+ZU84gDuxzHI v7eZAkEA1iLcJx+0zLw5LV5H5lGZf1FZ5gOVf7F3tAVh9V7PzOyBjFCYiYtZP4V4 4jQO4+TmIliE9XrTnTJ2A/3qf3zN8wJBAI6zohsJvA9+hUW8yUzC6gMn6BzE6Q2 TwfzG6b0i6Gv6cWd9XgU6JF+6xkH0CQe6OXJFzg0b6P7+TTH0y9XrECQAsTJIfO s+1aZLs0GpPfOJz7VhN9l9X7V/Ox5tDgYhZiJtZ8z4ZBEmj4N7JmH2m9yjg= -----END PRIVATE KEY-----""" rsa = RSAUtil(public_key, private_key) # 加密 data = "hello world" encrypted_data = rsa.encrypt(data) print("加密后的数据:", encrypted_data) # 解密 decrypted_data = rsa.decrypt(encrypted_data) print("解密后的数据:", decrypted_data) ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值