计算机是否总是遵循 2 的补码方法来表示负数?
Does computer always follow 2's complement method to represent negative number?
请查看以下代码并帮助我理解
int a=1;
int b=~1;
printf("%d",b);
输出是:
-2
因此,这说1 =(00000001)当经历〜产生(11111110)时,这是2号2的补充,因此-2是答案。因此,将始终假定为100为-4但不是4?
计算机总是遵循2的补充方法代表 负数?
no。
一些使用1的计算机(其中〜1 == -0),一些使用的"符号和幅度"(其中〜1 == -127),有些使用"偏差"(其中签名值是"无符号值" - 偏见",其中〜1 == 127)。对于整数来说,这些现在都相对罕见。
不稀有的东西是标准的(IEEE-754)浮点格式;这是"符号和幅度"(用于显着的)和"偏见"(用于指数)的光荣组合。
当您已经确切地确定数字有多少位时,只能定义两个的补充号码。您是否有一个三位签名的整数类型,在您存储100位的地方?如果是这样,则100将解释为-4。
如果将其存储在较大的整数类型中,我们通常会假设1个左侧的其他位是全部0(因为否则您应该显示它们是什么),并且该值将为正4。p>顺便说一句,现在找到一个具有C或C int
类型的编译器将是非常不寻常的,该编译器只有8位长8位,就像问题中的一个一样。(好的,"不寻常"是一种轻描淡写的说明,如评论,标准不允许这样做,据我所知,它的从未被认为是合法的,将普通的int
类型作为在一个可以存储在少于16位的问题中显示。您 can 在struct
中声明了仅3位的签名整数位,但是该语法与问题显示的语法完全不同。因此,即使将int b=~1;
解释为存储位模式11111110也不是正确的;实际的位模式至少有16位,近年来我们大多数人只将其汇编为32位。
相关文章:
- 寻找一种更好的方法来表示无符号字符数组
- 内存效率表示最短路径的方法?
- 在 C++ 中将整数数组转换为位集表示形式的最佳方法?
- 在C++中,将无符号整数转换为八进制表示,反之亦然的最佳方法是什么
- 在 C++17 中表示 std::byte 文字的正确方法是什么?
- 用各种语言表示模式的方法
- 在C++中将数据结构表示为字符串的首选方法是什么?
- 将两位数字转换为低内存表示的最快方法
- 在 C++11 中表示日内时间 HH:MM:SS 的最佳方法是什么?
- 计算机是否总是遵循 2 的补码方法来表示负数?
- 一种使用 unordered_map 表示对称稀疏矩阵的有效方法
- 类方法接受表示各种参数数函数的 lambda
- C 便携式方法获取u8字符串文字的值表示
- STL表示隐含交叉引用的数据结构的方法
- 将二进制字符的字符串表示转换为字符串的最佳方法
- 有没有一种方法可以打印对象的位表示
- C++ - 方法重写未按预期表示
- C++ 一种方法,该方法将十进制值作为用布尔数组表示的二进制的整数返回
- 有没有一种方法可以将表示为字符串的数字转换为等效的二进制数字
- 寻找连接对象的字符串表示的惯用方法