title: C语言有符号数和无符号数的判断方法
date: 2019-2-12 15:39:26
tags: C

学完CSAPP有符号数和无符号数的部分后冒出了这个问题,在网上查找资料后总结下。应用场景:在一个新系统中,不知道该系统是否支持无符号数。

基础知识

计算机中的整数分为无符号数和有符号数,假设字长2字节(4个16进制数组成,w = 16):

  • 无符号数如0xFFFF,从第1位到第16位都是数值1;
  • 有符号数如0xF000,第一位的1是符号位,表示这个数为负数,后面的3个1和12个0是数值位,用来代入计算数值。

有符号数有三种存储方法:补码、反码和原码,一般计算机都采用补码来存。

需要明确的是如果一个数本身小于0,那么肯定为有符号数,无须判断。以下假设预判断的数 a >= 0,不考虑溢出。

方法一:无符号数永远大于0

由该性质知,对无符号数取反,将得到正值;对有符号数取反,正负属性必定发生变化,相与必定小于0。(来自《C专家编程》)

代码:
#define ISUNSIGNED(a) (a >= 0 && ~a >= 0)

方法二:位运算

将a的最高位置1,如果大于0则为无符号数
代码:
#define ISUNSIGNED(a) (a | (1 << 31) > 0)

方法三:无符号数和有符号数相减

假设b为有符号数-1。
代码:
#define ISUNSIGNED(a) ((b - a) < 0)

C语言有符号数和无符号数的判断方法相关推荐

  1. C语言中有符号数和无符号数的问题

    C语言中有符号数和无符号数的问题 项目说明     考虑下列代码, 这段代码试图计算数组a中所有元素的和, 其中元素的数量由参数length给出: /* WARNING: This is buggy ...

  2. 关于汇编中有符号数和无符号数的判断

    首先给一段代码 1 #include <stdio.h> 2 int main() 3 {unsigned int x=9; 4  int y=-20; 5  int m=(x+y> ...

  3. c语言 有符号数与0作比较大小,C语言中有符号数与无符号数能否进行比较运算...

    无符号数和有符号数是不能进行比较运算的,否则可能会出现意想不到的错误,且极难检查出来! 首先肯几个例子(假设在32位的机器上): 1         1. 0 == 0U 2         2. - ...

  4. Qt之C语言有符号数与无符号数运算

    以32位的stm32f4为例: 1.  uint32_t t_int_k = 239773, t_int_km1 = 4294859707; 则t_int_k - t_int_km1 > 0; ...

  5. java中有符号数和无符号数,C语言中无符号数和有符号数之间的运算

    C语言中有符号数和无符号数进行运算(包括逻辑运算和算术运算)默认会将有符号数看成无符号数进行运算,其中算术运算默认返回无符号数,逻辑运算当然是返回0或1了. unsigned int和int进行运算 ...

  6. 怎么区分有符号数和无符号数

    转载至:http://www.myexception.cn/program/1264261.html 我还是搞不清指令本身是如何区分有符号数和无符号数!(问题汇总) 论坛的一个CSDN提问,对各方面的 ...

  7. c语言中的无符号字节,C语言之有符号数和无符号数

    我们知道,在C语言中存在无符号数和有符号数(一些高级语言如Java里面是没有无符号数的),但是对于计算机而言,其本身并不区别有符号数和无符号数,因为在计算机里面都是0或者1,但是在我们的实际使用中有时 ...

  8. C语言中的有符号数和无符号数之间转换

    C语言中的有符号数和无符号数之间转换 我们都知道C语言中有有符号数和无符号数两种整数表示方法,并且支持相互转换. 那么具体相互转换有什么规则,我们今天来了解一下: 在C语言中当声明一个像12345或0 ...

  9. C语言中 有符号数、无符号数、整数溢出

    #include<stdio.h> void main() {int l=-1;unsigned int c=135; printf("%u\n",l+c); } 这个 ...

最新文章

  1. css 字体样式设置
  2. 3分钟掌握Quartz.net分布式定时任务的姿势
  3. php 模板 php + mysql + myodbc,连接MySQL数据库在ASP中,就用MyODBC
  4. CF938G Shortest Path Queries
  5. [Vue.js]实战 -- 电商项目(四)
  6. XenCenter6.2 配置ISO库
  7. 大数据之路-阅读笔记
  8. PayPal怎么提现结汇,美金一直在PayPal压着?
  9. Deepfacelab 小白教程
  10. 技术术语学习之paradigm
  11. android apk上架流程,Android apk上架国内应用市场流程
  12. scrapy的spider中为什么使用yield
  13. 微信缓存导致调整内容不生效
  14. libgdx 3d_使用Java和libgdx进行3D游戏编程,使用Blender建立模型
  15. 转载: java 入门书籍(java7)
  16. (全程图解)RP8.0安装教程
  17. 自动采集收录导航系统源码分享
  18. 计算机考试新题,最新计算机考试题库及答案(全).doc
  19. 动力电池管理系统(BMS)策略与开发方法
  20. 快乐的linux命令行-使用命令

热门文章

  1. 2006年统计的国内外的一些机器视觉公司汇总
  2. Python 文件数据格式之 CSV 标准库
  3. 安装易语言后需要做的事情
  4. 余承东将兼任华为云与计算BG总裁,原总裁侯金龙任数字能源董事长
  5. 【天池学习赛】淘宝母婴购物数据可视化分析
  6. 第三节课20180909
  7. vulnhub靶场,Tomato
  8. 数据分享:全国A级景区数据(约12000条)
  9. ctfshow web入门 php特性
  10. 转载,envi对高光谱进行辐射定标和大气校正