c++中的有符号类型表示
Signed type representation in c++
在我读的书中说:
该标准没有定义有符号类型的表示方式,但指定了应在正值和负值之间平均划分的范围。因此,8位有符号字符保证能够保持-127到127之间的值;大多数现代机器使用允许-128到127之间的值的表示。
我假设[-128;127]范围来自一个叫做"twos补码"的方法,其中负数是!A+1(例如0111是7,然后1001是-7)。但我无法理解为什么在一些旧的(?)机器中,值在[-127;127]范围内。有人能澄清一下吗?
补码和有符号幅度都是用8位数字提供范围[-127127127]的表示。两者对+0和-0都有不同的表示形式。两者都被(大部分)早期的计算机系统所使用。
符号星等表示可能是人类想象中最简单的,使用它的原因可能与人们最初创建十进制计算机而不是二进制计算机的原因相同。
我可以想象,之所以使用一的补码,是因为早期计算机的创造者还没有考虑到二的补码。后来,由于向后兼容性。不过,这只是我的猜测,所以请对此持怀疑态度。
进一步信息:https://en.wikipedia.org/wiki/Signed_number_representations
作为一个稍微相关的事实:在IEEE浮点表示中,有符号指数使用excess-K表示,小数部分由有符号幅度表示。
实际上并不是-127到127。但是-127对-0和0对127。
早期的处理器使用了两种方法:
-
符号幅度:在这种情况下,通过将1放在最高有效位来形成否定答案。因此10000000和00000000都表示0
-
补码:只是不适用于正数。这导致两个零表示:11111111和00000000。
此外,two的补码几乎和其他两个一样古老。https://www.linuxvoice.com/edsac-dennis-wheeler-and-the-cambridge-connection/
- 表示类模板C++空类型
- C++显式类型转换(C 样式强制转换)的强制表示法和static_cast的多种解释
- 基于类型作为参数的字符串表示形式具有不同返回类型的函数
- 为表示一个或多个操作的C++函数的int参数寻找类型安全的替换
- 内存中的长长类型表示形式
- 整数文本太大,无法用任何整数类型表示--C++
- 您可以在具有相同表示形式的类型之间reinterpret_cast吗?
- 运行时错误:有符号整数溢出:964632435 * 10 无法在类型 'int' 中表示
- atoi() 表示int128_t类型
- 如何将升压数组表示为类型的指针?
- 使用模板元编程表示一组类型C++
- 默认构造函数是否表示C 中的通用类型的零
- C 中的运算符(::类型*)0表示什么意思
- 使用声明来表示模板声明中的类型
- 是否有一个术语来表示"single mutex deadlock"(具有非递归互斥锁的死锁类型情况)?
- 以C++显示浮点类型的二进制表示形式
- C++不可复制类型的值表示形式
- c++中的有符号类型表示
- 如何减少用户数据类型表示法?(typedef?)
- 指向限定和非限定类型表示的指针