C语言有符号数和无符号数的判断方法
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语言有符号数和无符号数的判断方法相关推荐
- C语言中有符号数和无符号数的问题
C语言中有符号数和无符号数的问题 项目说明 考虑下列代码, 这段代码试图计算数组a中所有元素的和, 其中元素的数量由参数length给出: /* WARNING: This is buggy ...
- 关于汇编中有符号数和无符号数的判断
首先给一段代码 1 #include <stdio.h> 2 int main() 3 {unsigned int x=9; 4 int y=-20; 5 int m=(x+y> ...
- c语言 有符号数与0作比较大小,C语言中有符号数与无符号数能否进行比较运算...
无符号数和有符号数是不能进行比较运算的,否则可能会出现意想不到的错误,且极难检查出来! 首先肯几个例子(假设在32位的机器上): 1 1. 0 == 0U 2 2. - ...
- Qt之C语言有符号数与无符号数运算
以32位的stm32f4为例: 1. uint32_t t_int_k = 239773, t_int_km1 = 4294859707; 则t_int_k - t_int_km1 > 0; ...
- java中有符号数和无符号数,C语言中无符号数和有符号数之间的运算
C语言中有符号数和无符号数进行运算(包括逻辑运算和算术运算)默认会将有符号数看成无符号数进行运算,其中算术运算默认返回无符号数,逻辑运算当然是返回0或1了. unsigned int和int进行运算 ...
- 怎么区分有符号数和无符号数
转载至:http://www.myexception.cn/program/1264261.html 我还是搞不清指令本身是如何区分有符号数和无符号数!(问题汇总) 论坛的一个CSDN提问,对各方面的 ...
- c语言中的无符号字节,C语言之有符号数和无符号数
我们知道,在C语言中存在无符号数和有符号数(一些高级语言如Java里面是没有无符号数的),但是对于计算机而言,其本身并不区别有符号数和无符号数,因为在计算机里面都是0或者1,但是在我们的实际使用中有时 ...
- C语言中的有符号数和无符号数之间转换
C语言中的有符号数和无符号数之间转换 我们都知道C语言中有有符号数和无符号数两种整数表示方法,并且支持相互转换. 那么具体相互转换有什么规则,我们今天来了解一下: 在C语言中当声明一个像12345或0 ...
- C语言中 有符号数、无符号数、整数溢出
#include<stdio.h> void main() {int l=-1;unsigned int c=135; printf("%u\n",l+c); } 这个 ...
最新文章
- css 字体样式设置
- 3分钟掌握Quartz.net分布式定时任务的姿势
- php 模板 php + mysql + myodbc,连接MySQL数据库在ASP中,就用MyODBC
- CF938G Shortest Path Queries
- [Vue.js]实战 -- 电商项目(四)
- XenCenter6.2 配置ISO库
- 大数据之路-阅读笔记
- PayPal怎么提现结汇,美金一直在PayPal压着?
- Deepfacelab 小白教程
- 技术术语学习之paradigm
- android apk上架流程,Android apk上架国内应用市场流程
- scrapy的spider中为什么使用yield
- 微信缓存导致调整内容不生效
- libgdx 3d_使用Java和libgdx进行3D游戏编程,使用Blender建立模型
- 转载: java 入门书籍(java7)
- (全程图解)RP8.0安装教程
- 自动采集收录导航系统源码分享
- 计算机考试新题,最新计算机考试题库及答案(全).doc
- 动力电池管理系统(BMS)策略与开发方法
- 快乐的linux命令行-使用命令