`
ttwang
  • 浏览: 334747 次
  • 性别: Icon_minigender_2
社区版块
存档分类
最新评论

有符号数与无符号数之间运算问题

阅读更多

有符号数与无符号数之间运算问题
以下实验均在virual c++6中运行通过
这个问题测试是否懂得C语言中的整数自动转换原则 ,有些开发者懂得极少这些东西。当表达式中存在有符号类型和无符号类型时所有的操作数都自动转换为无符号类型 。因此,从这个意义上讲,无符号数的运算优先级要高于有符号数,这一点对于应当频繁用到无符号数据类型的嵌入式系统来说是丰常重要的。
首先进行一个实验,分别定义一个signed int型数据和unsigned int型数据,然后进行大小比较:
    unsigned int a=20;
    signed int b=-130;
a>b?还是b>a?实验证明b>a,也就是说-130>20,为什么会出现这样的结果呢?
这是因为在C语言操作中,如果遇到无符号数与有符号数之间的操作,编译器会自动转化为无符号数来进行处理,因此a=20,b=4294967166,这样比较下去当然b>a了。
再举一个例子:
 unsigned int a=20;
 signed int b=-130;
 std::cout<<a+b<<std::endl;
结果输出为4294967186,同样的道理,在运算之前,a=20,b被转化为4294967166,所以a+b=4294967186

减法和乘法的运算结果类似。

如果作为signed int型数据的b=-130,b与立即数之间操作时不影响b的类型,运算结果仍然为signed int型:
signed int b=-130;
std::cout<<b+30<<std::endl;
输出为-100。

而对于浮点数来说,浮点数(float,double)实际上都是有符号数,unsigned 和signed前缀不能加在float和double之上,当然就不存在有符号数根无符号数之间转化的问题了。




特别注意 :

如果仅是int a = 20;

a 代表的是有符号数,即其等价意思是:signed int a = 20;


分享到:
评论

相关推荐

    Verilog无符号数和有符号数的运算

    Verilog无符号数和有符号数的运算

    C语言有符号数和无符号数运算

    在C语言中,有符号数和无符号数的运算规则可能会导致一些不直观的结果,这是因为它们在内存中的表示方式和运算规则有所不同。首先,我们来理解有符号数和无符号数的基本概念。 有符号数(signed numbers)可以表示...

    有符号数与无符号数的探讨

    综上所述,有符号数与无符号数之间的差异不仅体现在数值表示的范围上,更在于它们在编程语言和计算机内部处理机制上的区别。深入理解这些概念及其在具体场景中的应用,对于编写高效且无误的代码至关重要。无论是从...

    C语言系列(二)有符号数和无符号数详解 - CSDN博客1

    理解有符号数和无符号数的概念对于编写高效且正确的C语言程序至关重要,特别是在处理数值边界条件和溢出问题时。正确选择数据类型可以避免潜在的错误,并优化内存使用。在实际编程中,还需要考虑其他因素,如平台的...

    有符号数和无符号数间的比较

    在C语言中,当一个无符号数和一个有符号数进行比较运算时,有符号数会被隐含的转换成无符号数,并假设这两个数都是非负数,然后进行比较运算。当把一个有符号数转换成无符号数时,其底层的二进制表示没有改变,仅仅...

    单片机中无符号数运算容易出现的问题

    我们所用的单片机很有可能是16位或者8位的,这样,编程时所用的一些变量的取值范围会对我们的 运算有所限制....对于32的单片机来说,因为我们一般所处理的值很少能超过有符号数的最大取值,所以比较少遇到下面出现的问题.

    实验三 无符号数的算术四则运算语义处理程序实现

    实验三 无符号数的算术四则运算语义处理程序实现 本实验是编译原理课上的一个实验,旨在设计、编制、调试一个简单的语义处理分析程序,实现对无符号数四则运算语意处理。该程序可以对输入的算术表达式进行语义分析...

    Verilog 2001 有符号数 的数学运算

    5. 综合与仿真:进行RTL级和门级的仿真测试,分析使用有符号数运算的结果,以及从综合工具获得的面积结果,有助于了解有符号数运算在硬件实现中的效率和可靠性。 6. 综合警告:在综合过程中可能会出现一些警告信息...

    编译原理——无符号数的算术四则运算语义处理程序实现

    《编译原理——无符号数的算术四则运算语义处理程序实现》 在编译原理中,处理无符号数的算术四则运算语义是一项基础且重要的任务。这个程序设计实验旨在通过扩展实验一和实验二,实现一个能够识别并计算由无符号数...

    无符号数四则运算词法分析

    在这个项目中,我们将重点关注"无符号数四则运算"的词法分析部分。 词法分析,又称为扫描或分词,是编译器前端的第一步。它的任务是对源代码进行读取,识别并生成一系列的词汇单元(Token),这些Token是构成程序的...

    符号数(无符号数和有符号数)

    符号数是计算机中参与运算的数,可以分为无符号数和有符号数两大类。无符号数是没有符号的数,在寄存器中的每一位均可用来存放数值。有符号数则需要留出位来存放符号,通常情况下,对于同样的机器字长,无符号数的...

    理 解有符号数 和无符号数

    下面将详细探讨有符号数与无符号数的概念、表示方式以及它们之间的差异。 #### 一、基本概念 **1. 有符号数(Signed Numbers)** - **定义**:有符号数是指能够表示正数、零和负数的数字。 - **表示方式**:通常...

    C语言中无符号数和有符号数之间的运算

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

    C语言编写无符号大整数运算

    本项目"无符号大整数运算"就是这样的一个实例,它提供了大整数的加法、减法、乘法和除法(包括取整和求余)的功能。 首先,大整数通常用数组表示,每个数组元素存储一个位,数组的长度根据需要的位数动态调整。在...

    S7-200SMART PLC中无符号数据转换+比较+运算(子程序可重复调用).zip

    在PLC编程中,数据可以分为有符号和无符号两种类型。无符号数据通常用于表示非负整数值,如计数器或定时器的值。在S7-200SMART PLC中,无符号数据类型包括BOOL(布尔型)、BYTE、WORD和DWORD,分别对应位、字节、字...

    无符号32位数的四则运算

    在IT领域,尤其是在底层编程和系统开发中,理解无符号32位数的四则运算至关重要。这涉及到计算机内部如何处理数字以及如何用汇编语言实现这些运算。本文将深入探讨这一主题,涵盖无符号32位整数的加法、减法、乘法和...

    【推荐】C语言中有符号数与无符号数解析[归纳].pdf

    当有符号数和无符号数进行混合运算时,编译器通常会将有符号数提升为无符号数进行处理,这是因为无符号数的运算是定义明确的,不会出现溢出问题。这可能导致非预期的结果,因此在编程时需要特别注意类型匹配。 5. ...

    编译原理—— 无符号数的算术四则运算LR语法分析器设计实现

    ### 编译原理——无符号...通过对无符号数的算术四则运算的语法分析器的设计与实现,不仅加深了对编译原理中语法分析的理解,还掌握了LR分析方法的具体应用。此外,该实验还培养了解决问题的能力,提高了编程实践水平。

    《编译原理》实验 识别无符号数的词法分析器设计实现

    在这个实验中,我们的目标是设计并实现一个能识别无符号数的词法分析器,用于处理简单的算术四则运算表达式。 【实验目标】 实验旨在让学生掌握词法分析的基本方法,通过对程序设计语言源代码的扫描,将源代码分解...

Global site tag (gtag.js) - Google Analytics