Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 是否存在整数i,其中i<;二,&;i>;10? if(i10){ //这里的代码永远不会被访问或者什么? }_C#_Numbers_Integer_Int_Integer Overflow - Fatal编程技术网

C# 是否存在整数i,其中i<;二,&;i>;10? if(i10){ //这里的代码永远不会被访问或者什么? }

C# 是否存在整数i,其中i<;二,&;i>;10? if(i10){ //这里的代码永远不会被访问或者什么? },c#,numbers,integer,int,integer-overflow,C#,Numbers,Integer,Int,Integer Overflow,也许是为了防止整数溢出?编辑:我写这篇文章时不知道使用的是c语言。我已经使用C++,但是我相信这个原理对于C语言也是有效的。 没有满足条件的单个整数 编译器可以很好地优化if条件的主体(请参见此处了解详细信息) 然而,在i为易失性的情况下,i的值可能在i10测试之间发生变化。在这种情况下,可以接触到if主体 然而,尽管理论上可能如此,但其意图极不可能如此 下面是我的示例代码 if(i<2 && i>10){ //code here will never b

也许是为了防止整数溢出?

编辑:我写这篇文章时不知道使用的是c语言。我已经使用C++,但是我相信这个原理对于C语言也是有效的。
  • 没有满足条件的单个整数
  • 编译器可以很好地优化if条件的主体(请参见此处了解详细信息)
  • 然而,在
    i
    易失性的情况下,
    i
    的值可能在
    i10
    测试之间发生变化。在这种情况下,可以接触到if主体
然而,尽管理论上可能如此,但其意图极不可能如此

下面是我的示例代码

if(i<2 && i>10){
    //code here will never be reached or what?
}
#包括
使用std::cout;
空富(内部一)
{
如果(i<2&&i>10)
{
会议室(10)
{

cout一些c(假设c,因为它被标记了…即使它被标记了,也不假设整数,因为右侧的比较仍然是整数,所以它与标记匹配!;-)代码进入该
如果
…取:

#include <iostream>
using std::cout;

void foo(int i)
{
    if (i < 2 && i > 10)
    {
        cout << "The impossible happened in foo\n";
    }
}

void bar(volatile int i)
{
     if (i < 2 && i > 10)
    {
        cout << "The impossible happened in bar\n";
    }
}


否则,如果多线程(如果比较期间
i
的值发生变化)也可能发生这种情况除非您应用正确的锁定

否则代码将永远无法到达,因为数字不能小于2且大于10导致此问题的真正问题是什么?为什么您会对逻辑上不可能发生的事情感到奇怪?某些现有代码中是否存在使条件看起来可能为真的错误?也许您应该问一下请阅读。当然,不要忘记如何创建。我试图理解早期开发人员的代码,在不理解代码的情况下更改代码可能会破坏其中的一些逻辑。我发现这只是一个错误,目的是检查我是否在2到10的范围内,因此它是meant to be if(2这是哪种语言?它是c#@PaulFloydYep,在c#进行多线程处理时确实可能发生这种情况,但如果
i
是方法的参数,则永远不会发生这种情况(例如,如果
i
是它所包含的类的属性,则可能发生这种情况)好的,当重载操作符时,它会使用这个,操纵“:)是的,我刚刚添加了一种方法,它可以在没有额外类或重载的情况下传递…还有多线程的可能性…有多种奇怪的方式可以发生
public class Foo {
   public static bool operator> (Foo a, int b) {
       return true;
   }
   public static bool operator< (Foo a, int b) {
       return true;
   }
}
Foo i = new Foo();
if(i<2 && i>10){
  Console.WriteLine("Pass!");
}
private static bool odd;
public static int i { get { odd = !odd; return odd ? 1 : 11; } }