有符号数和无符号数的转换,有符号数怎么计算

广告位招租
联系电话:13518188210

什么是有符号数?什么是无符号数?

有符号数和无符号数的转换

有符号数 有符号数的实例
有符号数是针对二进制来讲的。 用最高位作为符号位,“0”代表“+”,“1”代表“-”;其余数位用作数值位,代表数值。 有符号数的表示:计算机中的数据用二进制表示,数的符号也只能用0/1表示。一般用最高有效位(MBS)来表示数的符号,正数用0表示,负数用1表示。 有符号数的编码方式,常用的是补码,另外还有原码和反码等。用不同二进制编码方式表示有符号数时,所得到的机器数可能不一样,但是真值应该是相同的。

无符号数 【百度.百科搜索】
无符号数是针对二进制来讲的,无符号数的表数范围是非负数。全部二进制均代表数值,没有符号位。即第一个”0″或”1″不表示正负。 无符号数与有符号数相对
C支持所有整形数据类型的有符号数和无符号数运算。尽管C标准并没有指定某种有符号数的表示,但是几乎所有的机器都使用二进制补码。通常,大多数数字默认都使有符号的,C也允许无符号数和有符号数之间的转换,转换原则是基本的位表示保持不变。因此在一台二进制补码机器上,当从无符号数转换为有符号数时,效果就是应用U2Tw,而从有符号转换为无符号数时,就是应用函数T2Uw,其中w表示数据类型的位数。T2Uw(x) = (x<0)?(x+2w) :x;U2Rw(x) = (x<2w-1)?x:(x-2w); 当执行一个运算时,如果它的一个运算数是有符号的而另一个是无符号的,那么C会隐含地将有符号参数强制转换为无符号数,并假设这两个数都是非负的,来执行这个运算。

在计算机中,有符号数和无符号数的区别在哪

有符号数最高位是符号位,实际只有七位是存储数据的,而无符号的则是8位都是存储数据的

怎么判断一个数是有符号数还是无符号数,比如0FFH它是多少?

这个是 有符号数的 前面的 0 1就是正负号的

一个有符号数比如B4H,转化为十进制后为什么变成-76D呢?其详细运算过程是什么?

首先,应该存在一个定义,定义B4H为有符号数,然后:
B4H = 1011 0100 B (补码)=1100 1100 B(原码)= – 76 D
计算机中数以补码形式存储,欲求值,需求出原码。
补码变原码:符号位不变,其他位取反再加1。

如何判断一个数为无符号数还是有符号数

1. 有一位同事在接受Microsoft面试时,其中一个题目就是“编写一些代码,确定一个变量是有符号数还是无符号数”。这实际上是一个相当难的问题,因为它留下了太多的空间让你去理解这个问题。有些人错误地把“有符号数”同“具有负号”等同起来,以为这个问题只需要一个小小的函数或宏,测试变量的值是否小于零就可以了。
问题自然没有这么简单。要回答这个问题,你必须在特定的编译器中确定一个给定的类型是有符号数还是无符号数。在ANSI C中,“char”既可以是有符号数,也可以是无符号数,这是由编译器决定的。当你编写的代码需要移植到多个平台时,知道类型是不是有符号数就非常有用了,如果该类型在所有的编译器编译时都是恒定的,那就再理想不过了。
你无法用函数实现目的。函数形式参数的类型是在函数内部定义的,所以它无法穿越调用这一关。因此,你必须编写一个宏,根据参数的声明对它进行处理。
接下来就是区别宏的参数到底是一个类型还是一个类型的值。假定参数是一个值,无符号数的本质特征是它永远不会是负的,有符号数的本质特征是对最左边一个位取补将会改变它的符号(比如2的补码表示,它肯定是个负数)。由于作为参数的这个值的其它位与这个测试无关,你可以对它们全部取补,结果是一样的。因此,可以像下面这样尝试:

[cpp] view plaincopy
#define ISUNSIGNED(a) (a >= && ~a >= 0)

如果宏的参数是一个类型,其中一个方法是使用类型转换:

[cpp] view plaincopy
#define ISUNSIGNED(type) ((type)0 – 1 > 0)

面试的关键就在于正确理解问题!你需要仔细地听,如果不理解问题或者觉得它的定义不清,可以要求一个更好的解释。第一个代码例子只适用于K&R C,新的类提升规则导致它无法适用于ANSI C。

Microsoft的绝大部分问题都想考察你在压力下能够怎样思考问题,但它们并不都是技术性的。

这是摘录自《c专家编程》的一段话,我觉得很有启发性。正确地理解问题是十分重要的,一不小心就会掉进陷阱中。

原创文章,作者:聚禄鼎,如若转载,请注明出处:https://www.xxso.cn/81776.html

(0)
聚禄鼎的头像聚禄鼎
上一篇 2023年2月8日 上午8:31
下一篇 2023年2月8日 上午8:31

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注