基本类型转换(无符号数转换成浮点需关注)

有符号与无符号数转换
本文详细介绍了有符号数和无符号数在不同数据类型间的转换规则,包括符号扩展、高位截断以及浮点数转换等过程。
部署运行你感兴趣的模型镜像

1. 有符号数的转换
  有符号数的转换中,如果从较低类型转换到较高类型,将进行符号扩展,例如一个值从short int(16位)转换到long类型,如果这个数是正数,则最高位为0,从16位扩展到32位时,扩展的高16位用0填充,即将符号位0进行扩展,这样扩展后的32位整数和原来的整数值是一样的。如果该数为负数,则最高位为1,从16位扩展到32位时,扩展的高16位用1填充,即将符号位1进行扩展,这样扩展后的32位整数和原来的整数值是也是一样的。
  如果从较高类型转换到较低类型,将抛弃高位,直接将低位复制过来,例如一个值从int(假定为32位)转换到short int型(16位),系统将抛弃高16位,取低16位的值作为转换后的值。
  浮点数类型和整数类型转换比较复杂,因为它们的内部表示方式不同,转换时它们不是简单的符号位扩展或者高位截断,它们首先需要进行内部表示方式的转换。左表是有符号数类型转换的所有情况。 

方法

char

short

符号位扩展

char

long

符号位扩展

char

unsigned char

最高位失去符号位意义,变为数据位

char

unsigned short

符号位扩展到short;然后从short转到 unsigned short

char

unsigned long

符号位扩展到long; 然后从long 转到unsigned long

char

float

符号位扩展到long; 然后从long 转到float

char

double

符号位扩展到long; 然后从long 转到double

char

long double

符号位扩展到long; 然后从long 转到long double

short

char

保留低位字节

short

long

符号位扩展

short

unsigned char

保留低位字节

short

unsigned short

最高位失去符号位意义,变为数据位

short

unsigned long

符号位扩展到long; 然后从long转到unsigned long

short

float

符号位扩展到long; 然后从long 转到float

short

double

符号位扩展到long; 然后从long 转到double

short

long double

符号位扩展到long; 然后从long 转到double

long

char

保留低位字节

long

short

保留低位字节

long

unsigned char

保留低位字节

long

unsigned short

保留低位字节

long

unsigned long

最高位失去符号位意义,变为数据位

long

float

使用单精度浮点数表示。可能丢失精度。

long

double

使用双精度浮点数表示。可能丢失精度。

long

long double

使用双精度浮点数表示。可能丢失精度。

 

2. 无符号数的转换
  无符号数转换相对简单一些,它没有符号位,当低级类型向高级类型转换时,只需要将高位补0,高级类型向低级类型转换同有符号数。左表是无符号数类型转换的所有情况。 

方法

unsignedchar

char

最高位作为符号位

unsigned char

short

0扩展

unsigned char

long

0扩展

unsigned char

unsigned short

0扩展

unsigned char

unsigned long

0扩展

unsigned char

float

转换到long; 再从 long 转换到float

unsigned char

double

转换到long; 再从 long 转换到double

unsigned char

long double

转换到long; 再从 long 转换到double

unsigned short

char

保留低位字节

unsigned short

short

最高位作为符号位

unsigned short

long

0扩展

unsigned short

unsigned char

保留低位字节

unsigned short

unsigned long

0扩展

unsigned short

float

转换到long; 再从 long 转换到float

unsigned short

double

转换到long; 再从 long 转换到double

unsigned short

long double

转换到long; 再从 long 转换到double

unsigned long

char

保留低位字节

unsigned long

short

保留低位字节

unsigned long

long

最高位作为符号位

unsigned long

unsigned char

保留低位字节

unsigned long

unsigned short

保留低位字节

unsigned long

float

转换到long; 再从 long 转换到float

unsigned long

double

convert directly to double

unsigned long

long double

转换到long; 再从 long 转换到double

 

您可能感兴趣的与本文相关的镜像

Stable-Diffusion-3.5

Stable-Diffusion-3.5

图片生成
Stable-Diffusion

Stable Diffusion 3.5 (SD 3.5) 是由 Stability AI 推出的新一代文本到图像生成模型,相比 3.0 版本,它提升了图像质量、运行速度和硬件效率

Python中,有多种方法可以遍历文件夹处理子目录,以下为你介绍常见的两种方法。 ### 递归遍历 递归遍历的核心思想是定义一个函数,在函数内部对当前目录下的所有文件文件夹进行遍历。如果遇到文件夹,则递归调用该函数继续遍历这个子文件夹。下面是示例代码: ```python import os allfile = [] def dirList(path): filelist = os.listdir(path) for file in filelist: filepath = os.path.join(path, file) if os.path.isdir(filepath): dirList(filepath) else: allfile.append(filepath) # 使用示例 path = '.' # 当前目录 dirList(path) for file in allfile: print(file) ``` 上述代码定义了`dirList`函数,通过`os.listdir`获取当前目录下的所有文件文件夹,使用`os.path.join`拼接路径,再用`os.path.isdir`判断是否为文件夹,若是则递归调用`dirList`函数,若不是则将文件路径添加到`allfile`列表中。 ### 使用`os.walk`方法 `os.walk`是Python标准库中用于遍历目录树的函数,它会自动处理子目录。以下是示例代码: ```python import os for root, dirs, files in os.walk('.'): for file in files: file_path = os.path.join(root, file) print(file_path) for dir in dirs: dir_path = os.path.join(root, dir) print(dir_path) ``` `os.walk`函数返回一个三元组,包含当前目录路径`root`、当前目录下的子文件夹列表`dirs`和当前目录下的文件列表`files`。通过嵌套循环,可以遍历所有的文件文件夹
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值