有符号数与无符号数之间运算问题
以下实验均在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无符号数和有符号数的运算
本文介绍了C语言中有符号数和无符号数之间进行运算的规则。
在C语言中,当一个无符号数和一个有符号数进行比较运算时,有符号数会被隐含的转换成无符号数,并假设这两个数都是非负数,然后进行比较运算。当把一个有符号数转换成无符号数时,其底层的二进制表示没有改变,仅仅...
我们所用的单片机很有可能是16位或者8位的,这样,编程时所用的一些变量的取值范围会对我们的 运算有所限制....对于32的单片机来说,因为我们一般所处理的值很少能超过有符号数的最大取值,所以比较少遇到下面出现的问题.
对实验一进行扩展,对识别的无符号数进行计值,并将...输出:如果输入单词串是合法的无符号数的算术四则运算,输出运算结果,并且给出每一步的分析过程;如果不是无符号数的算术四则运算,输出“非法四则运算表达式”。
有符号数与无符号数的探讨
这是编译原理课上做的一个实验,是关于无符号数四则运算语意处理的代码,代码完整,可以运行
ES6简介及Windows环境搭建Java泛型详解,通俗懂只需5分钟+关注原创粉丝喜欢码云未开通CSDN首页 (http://www.csdn.net?下载
C语言中有符号数和无符号数进行运算(包括逻辑运算和算术运算)默认会将有符号数看成无符号数进行运算,其中算术运算默认返回无符号数,逻辑运算当然是返回0或1了。 unsigned int和int进行运算 直接看例子来说明问题...
选取无符号数的算术四则运算中的各类单词为识别对象,要求将其中的各个单词识别出来。 输入:由无符号数和+,-,*,/, ( , ) 构成的算术表达式,如1.5E+2-100。 输出:对识别出的每一单词均单行输出其类别码(无...
重写了编译原理的课程设计词法分析部分, 主要作用就是分析输入串,进行分类,作为语法分析的输入。
S7-200SMART PLC中无符号数据转换+比较+运算(子程序可重复调用)
无符号32位数的四则运算,基本的加减乘除
使用c语言实现的无符号大整数的加、减、乘、除(取整和求余运算),可直接运行
//用来记录十进制数的符号,当指数为正时为1,为负时为-1 int i=0; //用来标志元素位置 int d=0; //用来表示每个数值型元素对应的数值 const int N=40;//用来确定输入识别符的最大长度 char data[N];//存放输入...
对无符号数的算术四则运算,编制一个语法分析程序。 输入:由实验一输出的单词串,入1, 3, 1。 输出:如果输入单词串是合法的无符号数的算术四则运算,输出“yes”,并且给出每一步的分析过程;如果不是无符号数的...
这是在日文系统下写的 可能有乱码符号‘\’在日文系统下是人民币那个符号
四位无符号数乘法器的VHDL语言设计,四位乘法器输入信号为a_in , b_in , 均为四位无符号数,输出为c_out, 为八位无符号数,有c_out = a_in × b_in 。程序设计中利用a_in与b_in (n) (n= 0, 1, 2, 3) 分别相乘后左移 ...
在VC下完成32位无符号数乘以32位无符号数,8086