无符号数运算 应该注意什么?


一:什么是无符号数 ?

无符号数(unsigned number) 是相对于有符号数而言的,指的是整个机器字长的全部二进制位均表示数值位,相当于数的绝对值。


有符号数(signed number) 和无符号数基本相同,不同的是:一般用最高有效位(MSB)来表示数的符号,正数用0表示,负数用1表示。


二:为什么有无符号数存在 ?

1 . 无符号数这个概念是编程语言所特有的数据类型,它我们是现实生活中遇到的各种形形色色的数据的映射,有些场合出现的数字不可能小于零,因此无符号数便应运而生,很好地实现了现实数据到计算机数据的抽象,提供了计算机处理输入数据的手段。


2 . 无符号数是建立在有符号数的概念之上的 。 表示数据大小的范围是有符号数的两倍,有更强大的表示张力。

三:无符号数如何使用 ?

1 . 表示方法:unsigned int i = 666 ;
2 . 表示范围:对于int ( 若是 16 bit )类型的变量而言,i 的范围是 0 ——> 65535 。

3 . 数据之间的联系:

无符号数据——无符号数据: 正常运算,结果为无符号数据。

无符号数据——有符号数据: 类型提升,因为无符号数级别大于有符号数级别,因此有符号数会类型提升为无符号数,可能会出现很奇葩的结果,但这取决于你如何解释它,什么意思?


有符号数 + 无符号数

#include <stdio.h>int main(void)
{unsigned int ui = 6;int i = -12 ;// 有符号数和无符号数相加时,有符号数的类型被提升到无符号数,最高位符号位变成数据位,如果对它的解释时无符号数的话,将非常可怕,例如:printf("%u\n",( ui+i ) );                // 无符号数解析:结果是  4294967290 一个超级大数printf("%d\n",( ui+i ) );                //  有符号数解析: 结果是  -6 if ( (ui+i) > 0 )                         // 0  默认是有符号数,也会被提升(unsigned int )0 ,结果 (ui + i ) > 0 成立。printf(" (ui+i) > 0 is True \n"); if ((ui + i) > (unsigned int)0)         // 同上。printf("(ui+i) > (unsigned short int)0 is True\n");return 0;
}

结果:
4294967290
-6
(ui+i) > 0 is True
(ui+i) > (unsigned short int)0 is True


四 : 无符号数 0 - 1 是什么 ?

C ++ 实现

#include <iostream>
using namespace std;
int main(void)
{unsigned short int i =0;int j = 8,p;p = j<<1;i =i-1;cout <<"i = " << i;            cout <<"\n p = " << p;return 0;
}

结果:
i = 65535 p = 16


为什么 ?

1 . 16位的范围是:(无符号)0——>65535 (65536个数字 2^16=65536) ;

2 . sizeof(short) =2 (16 bits) , unsigned short int a = 0 ;

3 . 0000_0000_0000_0000 减 1 就变成 (1111_1111_1111_1111) (无符号数表示为65535) ;


总结以下:

1 . 总之,不管怎么样,无符号和有符号一起运算,有符号会类型提升,运算正常运算。

2 . 其实,对于结果是什么,取决于我们如何去解析结果,是有符号还是无符号 才是重点。

3 . 比如: int a = -1 ; printf("%u\n",a); 结果不是 -1 。


int main(void)
{short int a = -1;printf("%u\n",a);         // 无符号解析 %u printf("%i\n",a);        // 有符号解析 %d 或者 %i return 0;
}

结果:

4294967290

-1


无符号数 0 ( 0 -1 == -1 ?)相关推荐

  1. 理解有符号数和无符号数的区别

    理解有符号数和无符号数 回头看上一节,我们所讲的数都是正数.同样是年纪和工资,前者不需要有负值,但后者可能需要--至少所有的老板都这样认为. 那么,负数在计算机中如何表示呢? 这一点,你可能听过两种不 ...

  2. 11-有符号数和无符号数

    1. 有符号数和无符号数 无符号数,因为没有符号位,所以只能表示一个正数. 有符号数,因为存在符号位,符号位如果是0的话,代表这是一个正数,符号位如果是1的话,代表这个数是一个负数. 我们可以用db伪 ...

  3. 理解有符号数和无符号数的区别。

    理解有符号数和无符号数 回头看上一节,我们所讲的数都是正数.同样是年纪和工资,前者不需要有负值,但后者可能需要--至少所有的老板都这样认为. 那么,负数在计算机中如何表示呢? 这一点,你可能听过两种不 ...

  4. 理解有符号数和无符号数负数

    理解有符号数和无符号数负数在计算机中如何表示呢?  这一点,你可能听过两种不同的回答.  一种是教科书,它会告诉你:计算机用"补码"表示负数.可是有关"补码"的 ...

  5. 理解有符号数和无符号数

    1.你自已决定是否需要有正负. 就像我们必须决定某个量使用整数还是实数,使用多大的范围数一样,我们必须自已决定某个量是否需要正负.如果这个量不会有负值,那么我们可以定它为带正负的类型. 在计算机中,可 ...

  6. C语言系列(二)有符号数和无符号数详解

    1.你自已决定是否需要有正负: 就像我们必须决定某个量使用整数还是实数,使用多大的范围数一样,我们必须自已决定某个量是否需要正负.如果这个量不会有负值,那么我们可以定它为带正负的类型. 在计算机中,可 ...

  7. 有符号数和无符号数负数

    From: http://blog.chinaunix.net/uid-26495963-id-3075227.html 理解有符号数和无符号数负数在计算机中如何表示呢? 这一点,你可能听过两种不同的 ...

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

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

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

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

最新文章

  1. spring mvc项目中利用freemarker生成自定义标签
  2. 初步理解Java的三大特性——封装、继承和多态
  3. Android 开发工具类 36_ getSimSerial
  4. 【解题报告】Leecode 748. 最短补全词——Leecode每日一题系列
  5. 为什么姜黄素+胡椒碱会让姜黄素吸收率增加2000%以上
  6. 回退n帧协议c语言代码,[计算机网络]Ch.3 数据链路层
  7. lsattr/chattr
  8. Java提高篇 —— Java三大特性之继承
  9. extjs5(03--项目中文件的加载过程)
  10. java怎么写自定义布局_java-Android设置自定义首选项布局
  11. r语言热图对列不进行聚类_R语言:手把手教你画pheatmap热图
  12. java抖音字符视频_java爬取新版抖音无水印视频教程(2020/09/14附带java代码)
  13. IDEA Auto build completed with errors解决办法
  14. LabVIEW串口调试助手
  15. 题解报告——星际战争
  16. 视频剪辑软件调研(Corel VideoStudio 2018、爱剪辑、微剪辑)
  17. Visual Studio 2010安装、配置及使用
  18. 2019浙江计算机二级考试考纲,计算机二级考试大纲(2019全国计算机二级考试大纲)...
  19. IP地址、网络号、网关的区别
  20. 外行人如何通过学习软件测试转行IT

热门文章

  1. 我的2020工作与学习总结
  2. “聪明车”接驳“智慧路”—— 智能网联车驶上新赛道
  3. 证券公司信息化6-交易和结算的区隔?什么是一级清算?二级、三级清算呢?涉及哪些IT应用系统?
  4. 一切围绕信任——闲鱼无忧购的技术演进
  5. 怎样使用mac终端修改系统时间
  6. sql语句粘贴过来无法执行
  7. 15.九象限图的绘制
  8. unity 动态裁剪图片
  9. 砍掉 16 位、32 位,英特尔提出 x86-S ,直接支持 64 位架构!
  10. GCC编译优化应用预编译头