c# - 为什么 [1111 1111] 在 Integer 中表示为 -1 而不是 255?
问题描述
我根据规则进行数字符号替换:逐位反转,然后加 1,但我使用的是整数数据类型而不是 sbyte。编译器如何理解我正在更改符号,
并且不返回值 255?
int operand1 = 0, operand2 = 0;
int result;
operand1 = 0x01; // [0000 0001]
result = ~operand1; // [1111 1110]
result++; // [1111 1111]
Console.WriteLine(" ~ {0} + 1 = {1} ", operand1, result);
输出:“~1 + 1 = -1”
解决方案
有有符号整数和无符号整数。有符号整数可以包含负值,因此范围的“上”部分从 (0- (int.max / 2)) 开始计数,并向下计数。
见这篇文章: https ://en.wikipedia.org/wiki/Two%27s_complement
如果您使用 Unsigned int,它的行为与我认为您期望的一样。
在有符号整数中,最高位确定其是否为负值。
推荐阅读
- angularjs - AG Grid - cellEditingStopped 中的 isCancelAfterEnd 状态?
- r - 如何将不同但相同类型的值存储到 R 中的数据框中?
- javascript - 如果值相等,则嵌套数组将对象添加到状态中的数组
- r - R中威布尔曲线下的着色子区域
- c# - 消毒异步方法c#的最佳方法
- php - 在codeigniter中创建php矩阵表
- oracle - 在 oracle 中合并两个模式表,包括依赖表
- python - 如何获取搭配形式的 WordNet 同义词集?
- sql-server - 在 MSSQL 中减去两列
- python - Python(列表):如何对重复的标签进行分组,总结它们各自的值