1. 数据类型

1.1 计算机中的符号位 

  • 有符号编码规则:数据的最高位用于标识数据的符号

    • 最高位为1,表示这个数为负数
    • 最高位为0,表示这个数为正数
  • 无符号编码规则:数据的最高位不代表符号位
    • 计算机不知道数据的正负,看人怎么看待

1.2 编程实验

  • 有符号数的符号位
#include <stdio.h>int main()
{char c = -5;short s = 6;int i = -7;// 判断最高位是否是0,0表示正数,1表示负数printf("%d\n", ((c & 0x80) != 0));      // 1,按位与,结果非0为负数printf("%d\n", ((s & 0x8000) != 0));     // 0,为正数printf("%d\n", ((i & 0x80000000) != 0));  // 1,为负数system("pause");return 0;
}

2. 有符号数的表示法

  • 在计算机内部用补码表示有符号数
  • 正数的补码(原码,反码)为正数本身
  • 负数的补码为负数的绝对值各位取反后加1
    • 8位整数5的补码为: 0000 0101
    • 8位整数-7的补码为:1111 1001
    • 16位整数20的补码为:0000 0000 0001 0100
    • 16位整数-13的补码为:1111 1111 1111 0011

3. 无符号数的表示法

  • 在计算机内部用原码表示无符号数

    • 无符号数默认为正数
    • 无符号数没有符号位
  • 对于固定长度的无符号数
    • MAX_VALUE+1 MIN_VALUE
    • MIN_VALUE-1MAX_VALUE
  • signed和unsigned
    • C语言中变量默认为有符号的类型
    • 用unsigned关键字声明变量为无符号类型——只有整数类型能够声明为unsigned(浮点数不能声明为无符号数)
      • int i;  // 默认为有符号整数
      • signed int j; // 显式声明变量为有符号整数;
      • unsigned int k ; // 声明为无符号整数

4.编程实验

  • 当无符号数遇上有符号数时→有符号会被看作无符号数!
#include <stdio.h>
#include <stdlib.h>int main()
{unsigned int i = 5;int j = -10;if ((i + j) > 0)   // j转换为无符号数,变成为大的正数(默认类型转换){printf("i+j>=0\n"); // 该结果为运行后最终的输出结果!}else{printf("i+j<=0\n");}system("pause");return 0;
}
  • 错误地使用unsigned
#include <stdio.h>int main()
{unsigned int i = 0;     // 无符号数永远为正数,即最小值为0// 当i减小到为0时,然后再减1就变成无符号int型数的最大值,// 以下代码会进入死循环,所以不应用无符号数来作为循环变量!for (i = 9; i >= 0; i--) // i为负数即退出循环,但i为无符号数,不可能为负数{printf("i=%u\n", i);}system("pause");return 0;
}
  • 运行结果:
  • 因为i永远大于等于0,MIN_VALUE-1 → MAX_VALUE

4. 小结

  • 有符号数用补码表示
  • 无符号数用原码表示
  • unsigned只能修饰整数类型的变量
  • 当无符号数与有符号数混合计算时,会将有符号数转换为无符号数后再进行计算,结果为无符号数。

c语言深度剖析(2)—有符号与无符号相关推荐

  1. C语言深度剖析书籍学习记录 第二章 符号

    \ 连接符号,// \  可以把下一行也注释调 编译器 删除注释时,会使用空格进行替代  

  2. 国嵌c语言深度,国嵌C语言深度剖析班(第一期)-国嵌

    国嵌C语言深度剖析班(第一期)共20个课程,包含源码及教程,主要讲了基本数据类型分析.auto,register,static分析.if,switch,do,while,for分析等,本教程提供1-5 ...

  3. C语言深度剖析笔记1

    关键字的秘密 数据类型 什么是数据类型? 数据类型可以理解为固定内存大小的别名; 数据类型是创建变量的模子(花形的,圆形的,星形的等等); char 1byte short 2byte int 4by ...

  4. C语言深度剖析笔记2

    接上半部分 C语言深度剖析笔记1 https://blog.csdn.net/halazi100/article/details/125844487 C语言深度剖析笔记1 指针 变量回顾 既然程序中的 ...

  5. c语言深度剖析百度云,《C语言深度剖析》笔记

    <C语言深度剖析>笔记 1.在c语言中,凡不加返回值类型限定的函数,就会被编译器作为返 回整形处理. 2.register 变量必须是一个单个的值,并且其长度应小于或等于整型 的长度.而且 ...

  6. [学习笔记]C语言深度剖析

    近期正在看<C语言深度剖析>,里面有一个讲解自加运算符(++),有一程序如下: void main() {int i;for(i=0, printf("First i = %d\ ...

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

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

  8. 读书笔记之《C语言深度剖析》第一章:关键字

    第一章引言 什么是定义及声明? 定义:定义是编译器创建一个对象,并且为这个对象分配一块内存并给它取上一个名字,这个名字就是我们经常所说的变量名或对象名. 声明:1.告诉编译器该变量名已经匹配了一个内存 ...

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

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

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

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

最新文章

  1. 高德地图markevents_GitHub - mingxuWang/Map: 高德地图API二次封装
  2. sed和awk有什么区别? [关闭]
  3. vue +element 搭建项目,要求既支持pc端又支持移动端
  4. 吴恩达深度学习笔记4-Course1-Week4【深层神经网络】
  5. 数据库降级_阿里 双11 同款流控降级组件 Sentinel Go 正式GA,云原生服务稳稳稳...
  6. 关于Web报表FineReport打印的开发应用案例
  7. mysql索引结构原理、性能分析与优化
  8. Win7系统账户被禁用的解决方法
  9. 编程实现迷你计算器功能_VBA编程实现饲料配方计算器
  10. java中关于时间的格式化
  11. 转:标准C++中的string类的用法总结
  12. java 常用富文本编辑器_常用的六个富文本编辑器
  13. vs2017 脚本错误,当前页面的脚本发生错误
  14. Linux基础教程: 4、用户组和用户的创建
  15. html输入框位置控制,JS 控制input 输入框光标位置
  16. 记一次搜狐畅游后台开发笔试
  17. CG100具体功能介绍
  18. 基于安卓的掌上二手图书交易app
  19. 求求你,别在MySQL中使用UTF-8了!
  20. 基于Paddle复现《Neighbor2Neighbor: Self-Supervised Denoising from Single Noisy Images》降噪网络

热门文章

  1. A15处理器和m1哪个好
  2. 第二届『Citric杯』NOIP提高组模拟赛
  3. cs224u Overview of the Stanford Sentiment Treebank
  4. 【转】最全网上纳税申报流程
  5. 垂直水平居中的三种实现方式
  6. springboot请求put请求
  7. js实现抽奖滚动效果
  8. 免费自媒体全网平台爆文采集器
  9. 九龙证券|300亿空袭,港股吓懵了!
  10. Python 常用的标准库以及第三方库有哪些?