我需要能够比较我在数组中的一些月份名称.
如果有一些直接的方式会很好:
Month.toInt("January") > Month.toInt("May")
Run Code Online (Sandbox Code Playgroud)
我的谷歌搜索似乎建议唯一的方法是编写自己的方法,但这似乎是一个常见的问题,我认为它本来已经在.Net中实现过,之前有人这样做了吗?
在C#中,类型实例变量的默认值是int?什么?
例如,在以下代码中,MyNullableInt如果从未明确分配,将具有什么值?
class MyClass
{
public int? MyNullableInt;
}
Run Code Online (Sandbox Code Playgroud)
(似乎答案几乎肯定是null或者0,但是那些是什么?)
我最近学得很快,但我有一个无法找到答案的基本问题
我想得到类似的东西
var a:Int = 3
var b:Int = 3
println( pow(a,b) ) // 27
Run Code Online (Sandbox Code Playgroud)
但pow函数只能使用double数,它不能用整数运算,我甚至无法通过Double(a)或a.double()等函数将int转换为double.
为什么它不提供整数的幂?它肯定会返回一个没有歧义的整数!为什么我不能将整数转换为double?它只是改变3到3.0(或3.00000 ...无论如何)
如果我有两个整数并且我想进行电源操作,我该怎样才能顺利完成?
谢谢!
我正在学习C++中的函数重载,并遇到了这个问题:
void display(int a)
{
cout << "int" << endl;
}
void display(unsigned a)
{
cout << "unsigned" << endl;
}
int main()
{
int i = -2147483648;
cout << i << endl; //will display -2147483648
display(-2147483648);
}
Run Code Online (Sandbox Code Playgroud)
根据我的理解,该int范围内给出的任何值(在我的情况下int是4个字节)都将调用,display(int)并且该范围之外的任何值都将是不明确的(因为编译器无法决定调用哪个函数).int除了最小值之外,它对整个值范围有效,即-2147483648编译因错误而失败
超载的召唤
display(long int)是模棱两可的
但是将相同的值与a int打印并给出值2147483648.我对这种行为感到困惑.
为什么只有在传递最负数时才会观察到这种行为?(该行为是相同的,如果一个short使用具有-32768-事实上,在负数和正数具有相同的二进制表示任何情况下)
使用的编译器:g ++(GCC)4.8.5
如何使用JavaScript生成8个,比如1到100之间的唯一随机数?
我想定义一个带有unsigned intas参数的函数,并向参数返回一个int全等模UINT_MAX + 1.
第一次尝试可能如下所示:
int unsigned_to_signed(unsigned n)
{
return static_cast<int>(n);
}
Run Code Online (Sandbox Code Playgroud)
但正如任何语言律师所知,从无符号转换为大于INT_MAX的已签名值是实现定义的.
我想实现这一点,以便(a)它只依赖于规范规定的行为; (b)它在任何现代机器上编译成无操作并优化编译器.
对于奇怪的机器......如果没有签名的int congruent将UINT_MAX + 1模数为unsigned int,那么假设我想抛出一个异常.如果有多个(我不确定这是否可能),那么就说我想要最大的一个.
好的,第二次尝试:
int unsigned_to_signed(unsigned n)
{
int int_n = static_cast<int>(n);
if (n == static_cast<unsigned>(int_n))
return int_n;
// else do something long and complicated
}
Run Code Online (Sandbox Code Playgroud)
当我不是一个典型的二元补充系统时,我并不太关心效率,因为我认为不太可能.如果我的代码成为2050年无所不在的符号量级系统的瓶颈,那么,我敢打赌,有人可以解决这个问题并对其进行优化.
现在,第二次尝试非常接近我想要的.尽管转换int为某些输入的实现定义,但是unsigned标准保证转换为保留模UINT_MAX + 1的值.所以条件确实检查我想要什么,它将在我可能遇到的任何系统上编译成什么.
但是......我仍然在int没有首先检查它是否会调用实现定义的行为.在2050年的一些假设系统中,它可以做谁知道什么.所以我想说我想避免这种情况.
问题:我的"第三次尝试"应该是什么样的?
回顾一下,我想:
[更新]
让我举一个例子来说明为什么这不是一个微不足道的问题.
考虑具有以下属性的假设C++实现:
sizeof(int) 等于4sizeof(unsigned) 等于4INT_MAX 等于32767INT_MIN等于-2 …我想说这是一个绝对的编程初学者,所以请原谅这个问题是多么基本.
我试图更好地理解R中的"原子"类,也许这适用于编程中的类.我理解字符,逻辑和复杂数据类之间的区别,但我很难找到数字类和整数类之间的根本区别.
假设我有一个简单x <- c(4, 5, 6, 6)的整数向量,这对于整数类是有意义的.但是,当我这样做class(x),我得到[1] "numeric".然后,如果我将此向量转换为整数类x <- as.integer(x).除了类不同之外,它返回相同的精确数字列表.
我的问题是为什么会出现这种情况,以及为什么一组整数的默认类是一个数字类,以及将整数设置为数字而不是整数的优点和缺点是什么.
设a,b和c为非大正整数.a/b/c是否始终等于/(b*c)与C#整数运算?对我来说,在C#中它看起来像:
int a = 5126, b = 76, c = 14;
int x1 = a / b / c;
int x2 = a / (b * c);
Run Code Online (Sandbox Code Playgroud)
所以我的问题是:x1 == x2为所有a,b和c做什么?
我发现方法的java.lang.Integer实现compareTo如下:
public int compareTo(Integer anotherInteger) {
int thisVal = this.value;
int anotherVal = anotherInteger.value;
return (thisVal<anotherVal ? -1 : (thisVal==anotherVal ? 0 : 1));
}
Run Code Online (Sandbox Code Playgroud)
问题是为什么使用比较而不是减法:
return thisVal - anotherVal;
Run Code Online (Sandbox Code Playgroud) 我有以下代码:
var str = "0x4000000000000000"; //4611686018427387904 decimal
var val = parseInt(str);
alert(val);
Run Code Online (Sandbox Code Playgroud)
我得到这个值:" 4611686018427388000",这是0x4000000000000060
我想知道JavaScript是否错误处理64位整数还是我做错了什么?