无符号与有符号类型转换和值为负数情况
1. 我们知道,当一个整型变量为有符号时,一般不管是赋正数还是负数,只要赋的值不超过该变量类型所表示的范围,值是不会变的。
2. 但当给无符号整形变量赋予负数值时,该变量会发生180度的变化。比如给一个无符号的char型变量a赋予-1时,该变量实际上值会变成255。给一个无符号的int型变量b赋予-1时,该变量实际上值会变成4294967295。
这种现象平常会发生在隐式转换中,比如在下面两个题中,判断一下那个会进入循环体:
如果平常不注意的话,会认为1,2都不会进入循环体,但实际上2是能进的,也就是说在的程序段中index-1的值是等于4294967295,也就是0xFFFFFFFF。
隐式类型转换造成了这个问题,在计算机中,数都是以补码的形式存放的,正数的补码是其原码本身,负数的补码是原码除符号位外求反加1。index-1是以index+(-1)形式去运算的,就是先把减数和被减数转换成补码,然后再相加,index为无符号长整型,(-1)为有符号整型。长整型和整型都是32位的(在32位机中),根据自动类型转换的规格,范围小的类型会转换成范围更大的类型(无符号长整型表示的范围比有符号整型表示的范围的范围大,无符号最高位用来表示值得原因)。所以在程序2中,-1在内存中的补码为0xFFFFFFFF,但类型转换成无符号长整型时,计算是将他以补码的形式输出(因为不考虑有符号的影响,所以这个值输出时就不需要在将补码转换为原来的原码),所以index-1是等于index+(unsigned long int)(-1)等于0+4294967295。
然后在第一个程序中,unsigned short类型为16位,比int型表示的范围低,所以unsiged short会转变成有符号int型,index-1的结果还是-1,所以不能执行循环体。
无符号与有符号类型转换和值为负数情况相关推荐
- java 无符号转有符号_java有符号无符号的转换
数据处理中常常遇到基本数据类型的操作,java都是有符号的数据,而与下位机通信中常常遇到无符号的比如uint8, uint16,uint32等等 1.为了完成这个功能还专门采用ByteBuffer的方 ...
- c语言无符号中符号什么意思,C语言中无符号与有符号及相加问题
C语言中无符号与有符号问题 unsigned char a[5] = { 12,36,96,128,182 }; a[]范围为0~256. 数组中数都有效. char a[5] = { 12,36,9 ...
- python无符号转有符号_Python | 散布符号
python无符号转有符号 There are multiple types of Scatter Symbols available in the matplotlib package and ca ...
- MySQL 无符号和有符号的区别
随笔记录: mysql无符号和有符号的区别 无符号unsigned 表示设置的的数据为0或者正数: 有符号则可以是负数 -: 内存占比 有符号 0-255 无符号 -127~127
- c语言中 加法符号如何定义,【 c语言中无符号和有符号的加法运算】【深入理解】--【sky原创】...
第一题 #include int main() { unsigned int a=6; int b=-20; printf("%d\n",a+b); (a+b)>6? put ...
- 计算机编码二进制0001,二进制学习01(二进制,进制运算,数据宽度,无符号位有符号位编码规则)...
二进制学习01 进制 一.二进制简介 1)什么是二进制? 2)二进制的简写形式 二.进制运算 1)八进制运算表 (1) 加法运算表 (2)乘法运算表 (3)八进制简单运算题 三.数据宽度 1)什么是数 ...
- ES6新增数据类型符号(2):共享符号与知名符号
目录 1.共享符号 2.知名符号 1.共享符号 上节课讲到每次调用得到的符号都是不相同的,但是存在需要同一个符号的需求,因此ES6提供了静态方法for,可以根据某个符号名称(符号描述)得到同一个符号, ...
- 【编译原理笔记15】运行存储分配概述,静态存储分配,栈式存储分配,调用序列和返回序列,非局部数据的访问,符号表,符号表建立
本次笔记内容: 7-1 运行存储分配概述 7-2 静态存储分配 7-3 栈式存储分配 7-4 调用序列和返回序列 7-5 非局部数据的访问 7-6 符号表 7-7 符号表建立 本节课幻灯片,见于我的 ...
- 如何用matlab中syms建立符号方程,用matlab求解符号方程及符号方程组
符号方程的求解 MATLAB7.0中的符号计算可以求解线性方程(组).代数方程的符号解.非线性符号方程(组).常微分方程(组),求解这些方程(组)是通过调用solve函数实现的,如求解代数方程的符号解 ...
最新文章
- memcached 实验论文
- 2022年初,给5年内还想做产品经理的提个醒!
- hello my first blog
- js var是什么类型_JS变量的执行环境和生命周期
- fileinput 加 ftp 加 nginx 加 SpringBoot上传文件
- 详解Python内置函数iter()用法
- python提取文本中的手机号_Python从vcf文件中读取手机号并进行去重操作
- 如何更改Andrioid模拟器 avd路径
- c++ string 长度限制_面试中要会的String相关问题
- fir 低通 matlab,用MATLAB设计FIR滤波器
- 电脑打开热点后无法连接到网络
- 腾达路由器 远端服务器未响应,腾达路由器设置完成不能上网的解决办法
- 软件工程——四则运算3(C#)
- lombok小辣椒的使用
- Vue3-浏览器兼容性 IE篇
- 吉林省松原市谷歌高清卫星地图下载
- 安全课堂|关于小程序AppSecret密钥泄露漏洞官方
- 任务管理器-性能中各项的意义
- 使用oracle数据库审计,Oracle数据库审计功能详解
- java图形化五子棋总结,Java从此丰富多彩-五子棋项目总结
热门文章
- STM32G431—ADC+E2PROM读写实验
- UltraEdit文本编辑器下载适用于Win/Mac和Linux
- 是男人就下100层【第三层】——高仿交通银行手机客户端界面
- 模糊语言群决策matlab编程,模糊群决策在物流选址中的运用
- 2022-6月后两周前端实习面经base北京-已入职滴滴
- oracle10漏洞补丁下载,Oracle漏洞修复工具
- 充气娃娃什么感觉?Python 告诉你!
- 爬取BOSS直聘信息并进行清理和可视化分析(python小白)
- .Net 开源工作流 Roadflow 的使用与集成
- python画正切函数_python的pygal模块绘制反正切函数图像方法