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语言中的有符号与无符号(挖坑)相关推荐

  1. C语言之(有关%d和%u的有关内容,输出方法)(有符号和无符号在内存中的存储情况)(整形无符号数和有符号数是如何进行计算的,整形无符号数和有符号数在循环中的应用举例)

    在C语言的课本中,我们常见的是%u,但我们平时在写代码常用的确是%d,它们二者之间有什么区别呢? 表示形式上 %u表示输入输出格式说明符,是按照unsigned int(无符号十进制数据)格式输入或输 ...

  2. c语言中的无符号字符指什么,深入分析C语言中的有符号和无符号

    有符号和无符号指的是数字那么有符号和无符号的区别是什么,我们这里一起来看在C语言中的有符号和无符号分析吧,希望这篇文章能够对各位有用. 就像我们必须决定某个量使用整数还是实数,使用多大的范围数一样,我 ...

  3. 【C语言进阶深度学习记录】二 有符号与无符号

    今天学习C语言中的有符号与无符号 文章目录 1 计算机中的符号位 1.1 有符号数的表示法 1.2 无符号数的表示法 1.3 signed 和 unsigned 2 实验-当有符号数与无符号数进行运算 ...

  4. 深入理解计算机系统(2.4)---C语言的有符号与无符号、二进制整数的扩展与截断...

    开篇请各位猿友允许LZ啰嗦几句,最近一直在写计算机系统原理这系列文章,也已经下定决心要把这本书的内容写完.主要目的其实是为了巩固LZ的理解,另外也想把这些内容分享给猿友们,毕竟LZ觉得这些内容对程序猿 ...

  5. c语言无符号扩展,深入理解计算机系统(2.4)---C语言的有符号与无符号、二进制整数的扩展与截断...

    开篇请各位猿友允许LZ啰嗦几句,最近一直在写计算机系统原理这系列文章,也已经下定决心要把这本书的内容写完.主要目的其实是为了巩固LZ的理解,另外也想把这些内容分享给猿友们,毕竟LZ觉得这些内容对程序猿 ...

  6. c语言中int默认是有符号还是无符号,C语言迷题:有符号数与无符号数的问题

    前些天偶然看到了一个收集C语言迷题的网站,很是感兴趣.本人对C/C++语言本身很是感兴趣,曾经做过几年相应的开发,也算是相对比较熟悉的了,但也被其中的一些问题给难住了,毕竟这些问题都是涉及到非常细节的 ...

  7. C语言——确定char、short、int和short变量有符号和无符号时的取值范围

    C语言--确定char.short.int和short变量有符号和无符号时的取值范围 #include <stdio.h> #include <limits.h>// dete ...

  8. 【最新】国际绝对音名标准频率及音符长度C语言宏定义(32位无符号整型精度、十二等律体系、A4=440.00000Hz)

    [最新]国际绝对音名标准频率及音符长度C语言宏定义(32位无符号整型精度.十二等律体系.A4=440.00000Hz) #ifndef __MUSIC_NOTE_H__ #define __MUSIC ...

  9. 基于Python的国际绝对音名标准频率C语言宏定义(32位无符号整型精度、十二等律体系、A4=440.01000Hz)

    基于Python的国际绝对音名标准频率C语言宏定义(32位无符号整型精度.十二等律体系.A4=440.01000Hz) 代码如下: f = open('./PITCH.h', 'w') C=44001 ...

最新文章

  1. ueeditor 百度编译器使用onchange效果
  2. device:GPU:0 but available devices are [ /job:localhost/replica:0/task:0/dev
  3. java tomcat自动安装教程_Tomcat:基础安装和使用教程
  4. 第四部分 Calendar使用示例
  5. python调用高德地图api 可视化_Python:利用高德地图API实现找房
  6. Suse 启动Apache2 失败
  7. Sparse Modeling of Intrinsic Correspondences
  8. tf.train.slice_input_producer(转)
  9. IDEA初使用:解决搜狗输入法不跟随BUG
  10. 不要迷失在技术的海洋中(转)
  11. C ++ 扑克牌洗牌
  12. 云南农职《JavaScript交互式网页设计》 综合机试试卷④——蔚蓝网导航栏
  13. 安科瑞无线测温装置,多点温度在线测温装置
  14. java编写小游戏大球吃小球
  15. 关于linux校准时间
  16. 如何计算系统用户并发数,系统最大并发数
  17. 攻防世界 Miscellaneous-200
  18. 真正影响光辉的是灯里的油
  19. 信息学奥赛一本通 1404:我家的门牌号 | OpenJudge NOI 2.1 7649:我家的门牌号 | 小学奥数 7649
  20. 软件测试面试题(软通动力,博彦科技,奇虎,瑞星,中软)

热门文章

  1. 【Spring学习】AOP实现日志记录
  2. 什么?内存不够了?进来教你malloc空间
  3. 纳税信用等级怎么划分 激励惩戒措施有哪些
  4. 水平+垂直 居中的方法
  5. Axure幻灯片案例
  6. 灰色墙面搭配白色沙发,时尚的整体质感
  7. 基于非线性参数的海洋捕食者算法
  8. uniapp微信小程序实现按住说话功能
  9. 封装运动函数左右切换版本轮播图
  10. 使用rufus制作Windows Server 2012 R2 U盘_wentfar·tsao