C语言中的有符号与无符号(挖坑)
1.计算机中的符号位,计算机如何表示正数和负数?
数据类型的最高位用于标识数据的符号
最高位为1,表明这个数为负数
最高位为0,表明这个数为正数
2.有符号数的表示法
在计算机内部用补码表示有符号数
正数的补码为正数本身
负数的补码为负数的绝对值各位取反后加1,即反码加1
对int最高位的问题感兴趣可以看一下这篇文章:神奇的-2147483648
如:
8位整数5的补码为:0000 0101
8位整数-7的补码为:1111 1001
16位整数20的补码为: 0000 0000 0001 0100
16位整数-13的补码为:1111 1111 1111 0011
以-7为例
7的二进制为 0000 0111
反码为 1111 1000
补码为 1111 1001
所以-7的补码就是1111 1001
3.实验
判断最高位,运算结果如果不等于0就是负数,等于0就是正数。
因为计算机内最高位为0是正数,1是负数。
#include "stdio.h"int main()
{char i = -5;short j =5;int k = -1;printf(" %d\n",((i&0x80)!=0));printf(" %d\n",((j&0x8000))!=0);printf(" %d\n",((k&0x80000000)!=0));return 0;
}
结果如下:
4.无符号数的表示法
在计算机内部用原码表示无符号数
-无符号数默认为正数,说明0是最小值,如char值从0~255。
-无符号数没有符号位,每一位都是原汁原味,255就是1111 1111。
对于固定长度的无符号数
MAX_VALUE+1 → MIN_VALUE
MIN_VALUE -1 → MAX_VALUE
5.回归C语言对有符号和无符号的 表示
signed和unsigned
1)C语言中变量默认为有符号的类型,signed
2)unsigned关键字声明变量为无符号类型
3)C语言中只有整数类型能够声明unsigned变量,
如char、int、short。
(1)当无符号数撞见无符号数擦出的火花
看下面代码,你觉得会输出什么,5加上-10,不是大于零吗?不是一个弱智问题?
#include "stdio.h"int main()
{unsigned int i = 5;int j = -10;if((i+j)>0) printf(" i +j >0 \n");else printf("i + j <0 \n");return 0;
}
来看结果
原因是什么?
当无符号数遇上了有符号数来进行数学运算的时候,有符号数将被看出无符号。
负数由无符号数来表示的话,最高位又是为1的,将是一个很大的正数,一个很大的蒸熟加上了5,所以还是正数。
j主动被转化为了无符号类型,-10被看成了一个无符号数,
(2)错误地使用unsigned
注意:无符号的最小值是0,话先放这里了
下面我们看程序,是不是输出9、8、7、…0呢?
#include "stdio.h"int main()
{unsigned int i = 0;for(i=9;i>=0;i--){printf("i = %u \n",i);}return 0;
}
正确答案是:永远输出。
因为看上面提到的,无符号数是不可能小于0的,最小也只是0.
而0被减了1,由于循环效果,就得到最大值了,得到这样的结果:
所以这个程序错就错在不应该用无符号类型来定义变量i,因为它的判断条件是要小于0,而无符号类型是不可能小于0的,将会产生死循环。
6.小结
(1)有符号数用补码表示,无符号数用原码表示
(2)正数的符号位为0,负数的符号位为1
(3)无符号数没有符号位
(4)无符号数只用于表示正数
(5)unsigned只能修饰整数类型的变量
(6)当无符号数与有符号数混合计算时,会将有符号数转换为无符号数后再进行计算,结果为无符号数
C语言中的有符号与无符号(挖坑)相关推荐
- C语言之(有关%d和%u的有关内容,输出方法)(有符号和无符号在内存中的存储情况)(整形无符号数和有符号数是如何进行计算的,整形无符号数和有符号数在循环中的应用举例)
在C语言的课本中,我们常见的是%u,但我们平时在写代码常用的确是%d,它们二者之间有什么区别呢? 表示形式上 %u表示输入输出格式说明符,是按照unsigned int(无符号十进制数据)格式输入或输 ...
- c语言中的无符号字符指什么,深入分析C语言中的有符号和无符号
有符号和无符号指的是数字那么有符号和无符号的区别是什么,我们这里一起来看在C语言中的有符号和无符号分析吧,希望这篇文章能够对各位有用. 就像我们必须决定某个量使用整数还是实数,使用多大的范围数一样,我 ...
- 【C语言进阶深度学习记录】二 有符号与无符号
今天学习C语言中的有符号与无符号 文章目录 1 计算机中的符号位 1.1 有符号数的表示法 1.2 无符号数的表示法 1.3 signed 和 unsigned 2 实验-当有符号数与无符号数进行运算 ...
- 深入理解计算机系统(2.4)---C语言的有符号与无符号、二进制整数的扩展与截断...
开篇请各位猿友允许LZ啰嗦几句,最近一直在写计算机系统原理这系列文章,也已经下定决心要把这本书的内容写完.主要目的其实是为了巩固LZ的理解,另外也想把这些内容分享给猿友们,毕竟LZ觉得这些内容对程序猿 ...
- c语言无符号扩展,深入理解计算机系统(2.4)---C语言的有符号与无符号、二进制整数的扩展与截断...
开篇请各位猿友允许LZ啰嗦几句,最近一直在写计算机系统原理这系列文章,也已经下定决心要把这本书的内容写完.主要目的其实是为了巩固LZ的理解,另外也想把这些内容分享给猿友们,毕竟LZ觉得这些内容对程序猿 ...
- c语言中int默认是有符号还是无符号,C语言迷题:有符号数与无符号数的问题
前些天偶然看到了一个收集C语言迷题的网站,很是感兴趣.本人对C/C++语言本身很是感兴趣,曾经做过几年相应的开发,也算是相对比较熟悉的了,但也被其中的一些问题给难住了,毕竟这些问题都是涉及到非常细节的 ...
- C语言——确定char、short、int和short变量有符号和无符号时的取值范围
C语言--确定char.short.int和short变量有符号和无符号时的取值范围 #include <stdio.h> #include <limits.h>// dete ...
- 【最新】国际绝对音名标准频率及音符长度C语言宏定义(32位无符号整型精度、十二等律体系、A4=440.00000Hz)
[最新]国际绝对音名标准频率及音符长度C语言宏定义(32位无符号整型精度.十二等律体系.A4=440.00000Hz) #ifndef __MUSIC_NOTE_H__ #define __MUSIC ...
- 基于Python的国际绝对音名标准频率C语言宏定义(32位无符号整型精度、十二等律体系、A4=440.01000Hz)
基于Python的国际绝对音名标准频率C语言宏定义(32位无符号整型精度.十二等律体系.A4=440.01000Hz) 代码如下: f = open('./PITCH.h', 'w') C=44001 ...
最新文章
- ueeditor 百度编译器使用onchange效果
- device:GPU:0 but available devices are [ /job:localhost/replica:0/task:0/dev
- java tomcat自动安装教程_Tomcat:基础安装和使用教程
- 第四部分 Calendar使用示例
- python调用高德地图api 可视化_Python:利用高德地图API实现找房
- Suse 启动Apache2 失败
- Sparse Modeling of Intrinsic Correspondences
- tf.train.slice_input_producer(转)
- IDEA初使用:解决搜狗输入法不跟随BUG
- 不要迷失在技术的海洋中(转)
- C ++ 扑克牌洗牌
- 云南农职《JavaScript交互式网页设计》 综合机试试卷④——蔚蓝网导航栏
- 安科瑞无线测温装置,多点温度在线测温装置
- java编写小游戏大球吃小球
- 关于linux校准时间
- 如何计算系统用户并发数,系统最大并发数
- 攻防世界 Miscellaneous-200
- 真正影响光辉的是灯里的油
- 信息学奥赛一本通 1404:我家的门牌号 | OpenJudge NOI 2.1 7649:我家的门牌号 | 小学奥数 7649
- 软件测试面试题(软通动力,博彦科技,奇虎,瑞星,中软)