C语言中short和unsigned short的取值问题和计算机组成原理
恭喜你找到了宝藏,本篇内容非常清晰明了
1.基础了解
先看图,short 和unsigned short的字节数是2,也就是说有2Byte,也就是说 16bit ,
即二进制 0000 0000 0000 0000
2.取值问题
short是带正负号的, 所以取值范围不同,但是最大值和最小值差是一样的
short 32767-(-32768)= 65535
unsigned short 65535-0 = 65535 ,表示为二进制就是 1111 1111 1111 1111
为什么是这个取值呢?因为
2的15次方:32768
2的16次方:65536
3.补码问题
正常人类理解,short取值为十进制的-1时,应表示为 1000 0000 0000 0001
而计算机不会进行“减”运算,都是进行“加”运算,所以1-1,会被计算机解释为 1+(-1)
short s1 = 1; 二进制 0000 0000 0000 0001
short s2 = -1;二进制 1000 0000 0000 0001
short s3 = s1+s2= 0 ;二进制0000 0000 0000 0001+1000 0000 0000 0001=1000 0000 0000 0010
上面s3的二进制
1000 0000 0000 0010
转化为十进制s3是 -2 而不是0,这是什么情况????
就是为了解决这一问题,才在计算机中引入了补码。
补码是正数不变,
负数是符号位不变,后面诸位取反,末位加一,-1由原来的
1000 0000 0000 0001,变成了 1111 1111 1111 1111
我们再重新计算一下
short s1 = 1; 二进制 0000 0000 0000 0001
short s2 = -1;二进制 1111 1111 1111 1111
short s3 = s1+s2= 0 ;
二进制0000 0000 0000 0001+ 1111 1111 1111 1111=(溢出一位1)0000 0000 0000 0000
还是用程序看起来更为直观:
运行结果下图所示(图中的0x意思就是16进制表示)
C语言程序默认将1前面的0都被省略了,并且默认%d输出出来是2字节,所以s2是八个f …非常尴尬
输出结果修正:
s1 = 1;十六进制 0001 ;二进制 0000 0000 0000 0001
s2 = -1;十六进制 f f f f ; 二进制 1111 1111 1111 1111
s3 = 0;十六进制 0000 ; 二进制 0000 0000 0000 0000
再看一个例子(二进制中,两个正数s1、s2前面的0再一次被省略,这个符号位0表示是正数)
C语言中short和unsigned short的取值问题和计算机组成原理相关推荐
- 在C语言中,int型数据的取值范围?
在C语言中,int型数据所占的字节和具体的编译器有关,32位编译器int占4个字节(VC,C-free),16位编译器int占2个字节(详见"int型数据所占字节和什么有关"). ...
- 请编写一个c程序确定signed,unsigned的char,short,int和long变量取值范围
way1: 通过打印标准的头文件中的相应的值来完成 符号常量 表示 CHAR_BIT char 的位数 CHAR_MAX char 的最大值 CHAR_MIN char 的最小值 SCHAR_MAX ...
- 基本功short与Unsigned short以及Java基本类型
C和C++中: short两个字节长度,其中符号位占了一位.所以实际数值位数是15位.取值范围为:-32768~+32768. unsigned short没有符号位,所以实质数值位数是16位.取值范 ...
- short与Unsigned short以及Java基本类型
C和C++中: short两个字节长度,其中符号位占了一位.所以实际数值位数是15位.取值范围为:-32768~+32768. unsigned short没有符号位,所以实质数值位数是16位.取 ...
- 计算char,short,int,long类型变量的取值范围
源自<The C Programming Language>P28 pr2-1: 编写一个程序以确定分别由signed及unsigned限定的char,short,int,long类型变量 ...
- python求图形面积_如何使用python语言中的if语句实现求取图形面积
在python设计语言中,逻辑运算符和判断语句结合起来使用,可以实现不同的功能.一般情况下,如果知道三角形的三边,可以利用三边计算出它的面积:规范的四边形知道对角的两边,就可以计算出对应的面积.下面利 ...
- 怎么计算byte,short,int等数据类型的取值范围
一个byte由八个位组成,符号位 + 数值位,如x0000000,其中第1位是符号位,后面的7位表示数值,第1位是符号位(0为正,1为负).这样+1就是00000001,-1就是10000001.最大 ...
- c语言中code table,unsigned char code table[]中的code的作用
unsigned char code table[]中的code的作用是告诉单片机,我定义的无符号的字符串组放在ROM(程序存储区)里面,因为C语言中没办法详细描述存入的是ROM还是RAM(寄存器), ...
- 51c语言int可以不加signed,c语言中signed 和unsigned是什么意思
1.signed是默认的,表示这个变量是有符号的,可以存储整数和负数. 2.unsigned则需要显示给出表示这个变量,没有符号值能存储数的大小,而且不能表示正负. 3.signed存储符号是有代价的 ...
- C语言中signed和unsigned理解
一直在学java,今天开始研究ACM的算法题,需要用到C语言,发现好多知识点都不清楚了,看来以后要多多总结~ signed意思为有符号的,也就是第一个位代表正负,剩余的代表大小,例如:signed i ...
最新文章
- JPA持久化异常:PersistenceException: org.hibernate.PersistentObjectException
- Tomcat应用部署:打war包、在Tomcat中注册用户角色、创建虚拟目录和域名
- AdapterView及其子类之一:基本原理(ListView、ListActivity类型)
- 《花落红尘》:对两性社会非爱即恨的文学消解
- 目标检测之YOLO V2 V3
- php腾讯云+视频上传失败,腾讯云视频上传和播放尝试总结
- 2015计算机类专业课类试卷,2015计算机专业知识试题.doc
- Python os模块 -Python系统编程中的操作模块
- 「讨论」测试工程师能否作为一份终生职业?30岁+怎么办?
- 关于USB-Audio(USB麦克风)设备的录音验证
- wiringPi (C语言) 控制树莓派引脚
- 杨凌职业技术学院计算机专业宿舍,杨凌职业技术学院宿舍条件怎么样,有独立卫生间和空调吗...
- 基于蒙特卡洛的大规模电动汽车充电行为分析(Matlab代码实现)
- 牛客网 多校3 I三角形(皮克定理)
- 使用C2Prog烧写程序
- Unsupported class file major version 55
- 成立不到半年,正面 PK 星巴克,luckin coffee是什么来路?
- javascript,H5,jQuery,css“实现音乐歌词解析,歌词同步滚动,进度条拖拽、进度条同步,音量控制,歌词同步高亮的功能齐全的简易音乐播放器
- 论文查重的次数是否会有限制?
- java课程设计斗地主_Java课程设计---web版斗地主
热门文章
- python中的二维列表(实例)_python实现两个一维列表合并成一个二维列表
- O'Reilly总裁提姆-奥莱理:什么是Web 2.0
- 讲台计算机的英语怎么读,讲台的英语单词怎么写,英语怎么拼写!
- 我为什么读博, 以及我为什么不读博?这是个问题!
- 欧拉定理和费马小定理
- 数据处理之异常值处理
- “中年跳槽,伤筋动骨”:35岁跳槽,你可要想清楚
- centos7安装steam
- Linux命令之设置普通用户具有超级管理员权限sudo
- 埃氏筛_四种形式 ( pass even , bool , char , differently judge )