Weird behaviour with left bitwise shift in C#(C#中左位移位的奇怪行为)
本文介绍了C#中左位移位的奇怪行为的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
测试此代码时
for (int i = 0; i <= 32; i++)
{
Console.WriteLine(i + " - " + ((byte.MaxValue + 1) << i));
}
我得到这些输出
0 - 256
1 - 512
2 - 1024
3 - 2048
4 - 4096
5 - 8192
6 - 16384
7 - 32768
8 - 65536
9 - 131072
10 - 262144
11 - 524288
12 - 1048576
13 - 2097152
14 - 4194304
15 - 8388608
16 - 16777216
17 - 33554432
18 - 67108864
19 - 134217728
20 - 268435456
21 - 536870912
22 - 1073741824
23 - -2147483648
24 - 0
25 - 0
26 - 0
27 - 0
28 - 0
29 - 0
30 - 0
31 - 0
32 - 256
请注意,从21到31,它给出的是0,这是预期的行为,但在32,我得到的是数字256。
我期望32得0分,但如您所见,我得到了256分。有人能给我讲讲.NET运行库在看到左移32时在做什么吗?
推荐答案
它实际上在C#语言规范中:
对于预定义的运算符,要移位的位数计算如下:
·当x的类型为int或uint时,移位计数由计数的低位五位给出。在其他 换言之,移位计数根据计数&;0x1F计算。
它也在MSDN上:
如果第一个操作数是int或uint(32位数),则移位计数由第二个操作数的低位五位给出。也就是说,实际移位计数为0到31位。
因此,将int移位32与将其移零完全相同。
这篇关于C#中左位移位的奇怪行为的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
编程基础网
本文标题为:C#中左位移位的奇怪行为
基础教程推荐
猜你喜欢
- 如何使用 .Net 检查 Active Directory 服务器是否已启动并正在运行? 2022-01-01
- C# 从 List<List<int>> 中删除重 2022-01-01
- Moq It.Is<>不匹配 2022-01-01
- 禁止输入少量字符,例如'<'、'&a 2022-01-01
- 如果有人提交恶意软件Nuget包怎么办? 2022-01-01
- WPF 模态进度窗口 2022-01-01
- 我应该在后面的代码中直接使用 Linq To SQL 还是使 2022-01-01
- Azure Functions:CosmosDBTrigger 未在 Visual Studio 中触发 2022-01-01
- .NET SerialPort DataReceived 事件未触发 2022-01-01
- 当值可以是对象或空数组时反序列化 JSON 2022-01-01
