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,所以不能执行循环体。

无符号与有符号类型转换和值为负数情况相关推荐

  1. java 无符号转有符号_java有符号无符号的转换

    数据处理中常常遇到基本数据类型的操作,java都是有符号的数据,而与下位机通信中常常遇到无符号的比如uint8, uint16,uint32等等 1.为了完成这个功能还专门采用ByteBuffer的方 ...

  2. c语言无符号中符号什么意思,C语言中无符号与有符号及相加问题

    C语言中无符号与有符号问题 unsigned char a[5] = { 12,36,96,128,182 }; a[]范围为0~256. 数组中数都有效. char a[5] = { 12,36,9 ...

  3. python无符号转有符号_Python | 散布符号

    python无符号转有符号 There are multiple types of Scatter Symbols available in the matplotlib package and ca ...

  4. MySQL 无符号和有符号的区别

    随笔记录: mysql无符号和有符号的区别 无符号unsigned 表示设置的的数据为0或者正数: 有符号则可以是负数 -: 内存占比 有符号 0-255 无符号 -127~127

  5. c语言中 加法符号如何定义,【 c语言中无符号和有符号的加法运算】【深入理解】--【sky原创】...

    第一题 #include int main() { unsigned int a=6; int b=-20; printf("%d\n",a+b); (a+b)>6? put ...

  6. 计算机编码二进制0001,二进制学习01(二进制,进制运算,数据宽度,无符号位有符号位编码规则)...

    二进制学习01 进制 一.二进制简介 1)什么是二进制? 2)二进制的简写形式 二.进制运算 1)八进制运算表 (1) 加法运算表 (2)乘法运算表 (3)八进制简单运算题 三.数据宽度 1)什么是数 ...

  7. ES6新增数据类型符号(2):共享符号与知名符号

    目录 1.共享符号 2.知名符号 1.共享符号 上节课讲到每次调用得到的符号都是不相同的,但是存在需要同一个符号的需求,因此ES6提供了静态方法for,可以根据某个符号名称(符号描述)得到同一个符号, ...

  8. 【编译原理笔记15】运行存储分配概述,静态存储分配,栈式存储分配,调用序列和返回序列,非局部数据的访问,符号表,符号表建立

    本次笔记内容: 7-1 运行存储分配概述 7-2 静态存储分配 7-3 栈式存储分配 7-4 调用序列和返回序列 7-5 非局部数据的访问 7-6 符号表 7-7 符号表建立 本节课幻灯片,见于我的 ...

  9. 如何用matlab中syms建立符号方程,用matlab求解符号方程及符号方程组

    符号方程的求解 MATLAB7.0中的符号计算可以求解线性方程(组).代数方程的符号解.非线性符号方程(组).常微分方程(组),求解这些方程(组)是通过调用solve函数实现的,如求解代数方程的符号解 ...

最新文章

  1. memcached 实验论文
  2. 2022年初,给5年内还想做产品经理的提个醒!
  3. hello my first blog
  4. js var是什么类型_JS变量的执行环境和生命周期
  5. fileinput 加 ftp 加 nginx 加 SpringBoot上传文件
  6. 详解Python内置函数iter()用法
  7. python提取文本中的手机号_Python从vcf文件中读取手机号并进行去重操作
  8. 如何更改Andrioid模拟器 avd路径
  9. c++ string 长度限制_面试中要会的String相关问题
  10. fir 低通 matlab,用MATLAB设计FIR滤波器
  11. 电脑打开热点后无法连接到网络
  12. 腾达路由器 远端服务器未响应,腾达路由器设置完成不能上网的解决办法
  13. 软件工程——四则运算3(C#)
  14. lombok小辣椒的使用
  15. Vue3-浏览器兼容性 IE篇
  16. 吉林省松原市谷歌高清卫星地图下载
  17. 安全课堂|关于小程序AppSecret密钥泄露漏洞官方
  18. 任务管理器-性能中各项的意义
  19. 使用oracle数据库审计,Oracle数据库审计功能详解
  20. java图形化五子棋总结,Java从此丰富多彩-五子棋项目总结

热门文章

  1. STM32G431—ADC+E2PROM读写实验
  2. UltraEdit文本编辑器下载适用于Win/Mac和Linux
  3. 是男人就下100层【第三层】——高仿交通银行手机客户端界面
  4. 模糊语言群决策matlab编程,模糊群决策在物流选址中的运用
  5. 2022-6月后两周前端实习面经base北京-已入职滴滴
  6. oracle10漏洞补丁下载,Oracle漏洞修复工具
  7. 充气娃娃什么感觉?Python 告诉你!
  8. 爬取BOSS直聘信息并进行清理和可视化分析(python小白)
  9. .Net 开源工作流 Roadflow 的使用与集成
  10. python画正切函数_python的pygal模块绘制反正切函数图像方法