如何查看变量的类型,无论是无符号32位,带符号16位等等?
我该如何看待它?
在C++中迭代向量的正确方法是什么?
考虑这两个代码片段,这个工作正常:
for (unsigned i=0; i < polygon.size(); i++) {
sum += polygon[i];
}
Run Code Online (Sandbox Code Playgroud)
还有这个:
for (int i=0; i < polygon.size(); i++) {
sum += polygon[i];
}
Run Code Online (Sandbox Code Playgroud)
产生warning: comparison between signed and unsigned integer expressions
.
我是C++世界的新手,所以unsigned
变量对我来说有点可怕,我知道unsigned
如果使用不正确,变量会很危险,所以 - 这是正确的吗?
我是否正确地说有符号和无符号整数之间的区别是:
还有其他差异吗?
为什么Java不包含对无符号整数的支持?
在我看来,这是一个奇怪的遗漏,因为它们允许人们编写不太可能在意外的大输入上产生溢出的代码.
此外,使用无符号整数可以是一种自我文档形式,因为它们表明unsigned int意图保留的值绝不应该是负数.
最后,在某些情况下,无符号整数对于某些操作(例如除法)可能更有效.
包含这些内容的不利之处是什么?
我永远无法理解如何unsigned long
在C中打印数据类型.
假设unsigned_foo
是unsigned long
,然后我尝试:
printf("%lu\n", unsigned_foo)
printf("%du\n", unsigned_foo)
printf("%ud\n", unsigned_foo)
printf("%ll\n", unsigned_foo)
printf("%ld\n", unsigned_foo)
printf("%dl\n", unsigned_foo)
而且他们都打印了某种-123123123
数字而不是unsigned long
我的数字.
有没有办法在Java中声明unsigned int?
或者问题也可以这样构成:Java等同于unsigned?
只是告诉你我正在研究Java的实现的上下文String.hashcode()
.如果整数是32 unsigned int,我想测试碰撞的可能性.
我试图转换无符号的有符号字节.问题是我收到的数据是无符号的,Java不支持无符号字节,因此当它读取数据时,它将其视为已签名.
我尝试通过以下我从Stack Overflow获得的解决方案来转换它.
public static int unsignedToBytes(byte a)
{
int b = a & 0xFF;
return b;
}
Run Code Online (Sandbox Code Playgroud)
但是当它再次以字节转换时,我得到相同的签名数据.我试图将此数据用作Java函数的参数,该函数只接受一个字节作为参数,因此我不能使用任何其他数据类型.我该如何解决这个问题?
我知道,这个问题似乎很奇怪.程序员有时会想太多.请继续阅读......
在CI中使用signed
和unsigned
整数很多.我喜欢这样一个事实:如果我执行诸如将有符号整数分配给无符号变量之类的操作,编译器会发出警告.如果我将带符号与无符号整数进行比较,我会得到警告.
我喜欢这些警告.他们帮助我保持我的代码正确.
为什么我们不能为花车提供同样的奢侈品?平方根绝对不会返回负数.还有其他地方负浮动值没有意义.无符号浮点数的完美候选者.
顺便说一句 - 我并不是真的热衷于通过从浮点数中移除符号位来获得的单一额外精度.float
因为他们现在对我非常满意.我只想将浮点数标记为无符号,并获得与整数相同的警告.
我不知道任何支持无符号浮点数的编程语言.
知道为什么他们不存在吗?
我知道x87 FPU没有处理无符号浮点数的指令.让我们使用带符号的浮点指令.滥用(例如,低于零)可以被认为是未定义的行为,就像未定义有符号整数的溢出一样.
在C++中,我喜欢访问64位无符号整数,via unsigned long long int
或via uint64_t
.现在,在Java中,long是64位,我知道.但是,他们签了名.
是否有一个unsigned long(long)可用作Java原语?我该如何使用它?
我知道int
和long
(32位和64位数字),但是什么uint
和ulong
?