零位扩展和符号位扩展

简介: 1、符号扩展:当用更多的内存存储某一个有符号数时,由于符号位位于该数的第一位,扩展之后,符号位仍然需要位于第一位,所以,当扩展一个负数的时候需要将扩展的高位全赋为1;对于正数而言,符号扩展和零扩展是一样的,因为符号位就是0。

1、符号扩展:当用更多的内存存储某一个有符号数时,由于符号位位于该数的第一位,扩展之后,符号位仍然需要位于第一位,所以,当扩展一个负数的时候需要将扩展的高位全赋为1对于正数而言,符号扩展和零扩展是一样的,因为符号位就是0

比如一个用一个8位二进制表示-1,则是10000001

如果把这个书用16位二进制表示时,则为11111111 10000001 高位全都是1,这个叫做符号扩展,主要用于对其操作数。

2、零扩展就是全补零。不论其符号位是多少,高8位全都补0.

能过上面的定义可以看出在C++中,如果把一个char向一个整形转换的时候,就会存在着这个问题

如果你想得到一个正数,那么如果一个字符的ASCII码值是小于零的,而直接用(int)c进行强制类型转换,结果是通过符号扩展得到的也为一个负数。要得到正数,一定要用(int)(unsigned char)c;因为unsigned char去除了c的符号位,所以,这样的类型转换后,再用(int)进行转换得到的就是一个正数。

3、从上机的叙述得知,有符号数向其它类型数据转化(charint,charunsigned int)时,进行符号位扩展;无符号数向其它类型转换(unsigned charint, long)时,进行零扩展。

char

short

符号位扩展

char

unsigned char

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

char

unsigned short

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

unsigned char

char

最高位作为符号位

unsigned char

short

0扩展

unsigned char

float

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

4、由大数据类型向小数据类型转换时,保留低位字节。

unsigned long

char

保留低位字节

unsigned long

short

保留低位字节

示例

#include <stdio.h> 

int main()   

int i =129; 

char chA= (char)i; 

int c = (int)(unsigned char)chA; 

int b = (int)chA; 

printf("sign extension: %d/n",b); 

printf("zero extension: %d/n",c);  

system("pause"); 

return 1;   

运行结果:

sign extension: -127

zero extension: 129 

请按任意键继续. . .

原文:

http://blog.csdn.net/jaylong35/article/details/6160736

http://www.cnblogs.com/xiaoka/articles/2651366.html

目录
相关文章
|
监控 物联网 Windows
MQTT常见问题之mqtt自动断开了连接如何解决
MQTT(Message Queuing Telemetry Transport)是一个轻量级的、基于发布/订阅模式的消息协议,广泛用于物联网(IoT)中设备间的通信。以下是MQTT使用过程中可能遇到的一些常见问题及其答案的汇总:
|
9月前
|
SQL 存储 关系型数据库
Mysql并发控制和日志
通过深入理解和应用 MySQL 的并发控制和日志管理技术,您可以显著提升数据库系统的效率和稳定性。
348 10
|
11月前
|
人工智能
写歌词的技巧和方法:优化歌词结构的秘诀,妙笔生词AI智能写歌词软件
歌词是音乐的灵魂,优化其结构能让作品更加动人。掌握开头吸引人、主体结构清晰、情感递进自然及结尾余味悠长等技巧至关重要。同时,借助《妙笔生词智能写歌词软件》的多种AI功能,如智能写词、押韵优化等,可有效提升创作效率与质量,为你的歌词增添光彩。
|
设计模式 存储 算法
揭秘模版方法模式-让你的代码既灵活又可维护
本文深入探讨了模板方法模式在软件开发中的应用。开篇通过介绍软件设计的挑战,引出模板方法模式的重要性。随后,文章展示了不使用设计模式实现时存在的问题,并通过一个重构示例,详细阐述了如何使用模板方法模式解决这些问题。本文还深入剖析了模板方法模式的工作原理,总结了其优点和缺点,并提供了最佳实战建议。此外,文章还讨论了模板方法模式与其他设计模式的结合应用,为读者提供了全面的视角来理解和应用这一设计模式。
425 0
揭秘模版方法模式-让你的代码既灵活又可维护
|
监控 安全 算法
云上智能风控:构建金融安全的智能防线
云上智能风控系统具有良好的灵活性和可扩展性。随着金融市场的不断变化和技术的不断发展,系统能够灵活调整风控策略和算法模型以适应新的风险类型和场景。同时,系统还能够根据业务需求进行功能扩展和升级以满足不同金融机构的个性化需求。
801 7
|
存储 数据库 C++
"深入剖析Python元组(tuple):与列表的对比、特性解析及高效应用场景展示"
【8月更文挑战第9天】Python元组与列表虽均用于存储元素集合,但有本质差异。元组不可变,创建后无法修改,适合保护数据不被意外更改的场景,如作字典键或传递固定值。列表则可变,支持动态增删改,适用于需频繁调整的数据集。元组因不可变性而在性能上有优势,可用于快速查找。两者各有千秋,根据具体需求选择使用。例如,元组可用于表示坐标点或日期,而列表更适合管理用户列表或库存。
490 1
|
安全 Linux 测试技术
在CentOS上安装Elasticsearch和Kibana
在CentOS上安装Elasticsearch和Kibana
413 0
|
Prometheus 监控 负载均衡
微服务之服务治理
简单来说,服务治理就是对微服务架构中的服务进行管理、监控和控制的一系列技术和方法。它确保服务之间的调用、依赖和协作能够顺利进行,从而保障整个系统的稳定、可靠和高效。
238 0
|
网络协议
DHCP服务详解
DHCP服务详解
812 0
|
存储 缓存 网络协议