C语言有符号和无符号数
%x表示无符号十六进制
%#x表示0x的十六进制
%o 无符号以八进制表示的整数
%lu表示输出无符号长整型整数
%u表示输出无符号整型整数
int main()
{ int a = -1; unsigned int b = 1; if(a > b) printf("a > b, a = %d, b = %u\n", a, b); else printf("a <= b, a = %d, b = %u\n", a, b); exit(0);
}
输出结果为:
a>b a=-1 b=1
当执行一个运算时(如这里的a>b),如果它的一个运算数是有符号的而另一个数是无符号的,那么C语言会隐式地将有符号 参数强制类型为无符号数,并假设这两个数都是非负的,来执行这个运算。
原因: (把有符号的变成了无符号的)
把if语句改为if(a > (int)b)即可。这样程序就会认为是两个有符号数在进行比较,-1就不会隐式地转换为无符号数而变成UMax。在32和64位的机子上,-1对应的无符号数应该是4 294 967 295,即32位的无符号数的最大值(UMax)
解决: (无符号转为有符号)
把if语句改为if(a > (int)b)即可。这样程序就会认为是两个有符号数在进行比较,-1就不会隐式地转换为无符号数而变成UMax。
建议:
尽量避免有符号数与无符号数的比较运算和避免减法运算,在很多时候,在unsigned的世界里,x-y>0与x>y都是不等价的。
extern int a; //声明一个变量 (标准的声明)
int a; //定义一个变量 如果已经被定义了,则为声明
无符号char类型数运算
unsigned char s = 0;
s = s - 1;
printf(“%d\n”,s) //输出255 相当于0加上-1的补码 0000 0000 + 1111 1111 = 1111 1111 (255)
有符号char类型数运算
char s = 127; 0111 1100
s = s + 5; 0111 1111
补码 =》原码 符号位不变,其它位取反,最后一位加1,
例如:
补码:1000 0100 132
过程:1111 1011 =》1111 1100
原码:0111 1100 -127
当表达式中存在有符号类型和无符号类型时所有的操作数都自动转换为无符号类型。
C语言有符号和无符号数相关推荐
- 汇编中有符号与无符号数以及CF,OF标志位的区分
汇编中有符号与无符号数以及CF,OF标志位的区分 一. 只有一个标准! 首先需要知道,计算机对数值的存储采用补码形式存储,一来避免了+0和-0的尴尬,二来数值的加法和减法可以统一为补码的加法. 在汇编 ...
- linux有符号和无符号,汇编中有符号与无符号数的区分
转载自:http://hi.baidu.com/asmsky/blog/item/7290d20076cab6da277fb5b8.html 一.只有一个标准! 在汇编语言层面,声明变量的时候,没有 ...
- 有符号与无符号数强转的可逆性
有符号与无符号数强转的可逆性 1 static void TestTypeConvert() 2 {//把一个有符号数转为无符号后再转回来值保持不变,以下以1字节为例 3 //原理:计算机中符点数都是 ...
- C/C++ —— signed 与 unsigned 有符号和无符号数及其移位
unsigned int a = 0; unsigned int b = -1; // b 为 0xffffffff unsigned int c = a - 1; // c 为 0xffffffff ...
- C语言高级编程:如何确定一个变量是有符号还是无符号数
ANSI C中的整型升级: 1)char,short int或者int型位段(bit-field),包括它们的有符号或无符号变型, 2)以及枚举类型,可以使用在需要int或unsigned int的表 ...
- 【C语言】有符号和无符号数的比较运算
int a = -1;unsigned int b = 1;if(a < b)printf("a < b\r\n");elseprintf("a > b ...
- 有符号数无符号数加法以及浮点数表示
写在前面:计算机中数据存储与运算的专业名词听起来晦涩,实际上我们在九年义务教育阶段就已经掌握了,如:整型(integer)--整数,浮点数(float)--小数,无符号数(unsigned)--正数, ...
- 有符号数无符号数比较(学习笔记)
最近在CSAPP看到一个有趣的小例子 -1== 4294967295? 先上代码 #include<iostream> #include<bitset> #include< ...
- C++有符号和无符号数的转换
本文转自:http://www.94cto.com/index/Article/content/id/59973.html 1.引例: 今天在做了一道关于有符号数和无符号数相互转换及其左移/右移的问题 ...
- 计算机中的无符号有几种,【数据结构】整数类型之有符号、无符号数(原码、反码、补码)详解。...
Fist:why? 有时候只知道什么还不够,我们还需要为什么,所以我在整个数据结构系列中都要追寻这个答案. Q1:为什么需要整型数据. 因为整型数据结构跟生活密切相关,生活中.数学中到处都是整型数字. ...
最新文章
- windows怎么用qt MinGW gcc编译c代码
- 开课吧python小课学了有用吗-未来2年,会计发展新趋势,你有必要了解一下......
- Java计算文件MD5值
- SVN黑马程序员笔记
- Excel技巧:如何用函数删除换行符、文本前空格、文本中间空格?
- 韶关python培训班_《韶》字意思读音、组词解释及笔画数 - 新华字典 - 911查询
- 帅到没朋友分数 20
- mysql定时执行任务
- 51单片机系列(三)51 单片机游戏设计 —— 双人对战小游戏(石头剪刀布)
- 使用线性回归,岭回归,Lasso回归预测鲍鱼年龄
- Flash as2.0与3.0功能性能详细对比
- 《PostgreSQL 开发指南》第 08 篇 备份与恢复
- 校友会小程序开发笔记六:校友活动聚会功能模块设计与实现
- 【原型化开发】原型设计工具——墨刀
- 阜阳计算机学校招生,阜阳计算机学校2021年招生简介
- java代码生成密钥
- UltraISO软件下载安装及制作 Linux 系统 U 盘启动盘
- 瑞芯微RK3399主板开发,RK3399芯片设计参数分析
- ubuntu: 终端全屏快捷键
- 力扣刷题笔记——剑指offer100题