如果在算术运算中short自动提升int,那么为什么:
short thirty = 10 * 3;
Run Code Online (Sandbox Code Playgroud)
对short变量的合法分配thirty?
反过来,这个:
short ten = 10;
short three = 3;
short thirty = ten * three; // DOES NOT COMPILE AS EXPECTED
Run Code Online (Sandbox Code Playgroud)
以及:
int ten = 10;
int three = 3;
short thirty = ten * three; // DOES NOT COMPILE AS EXPECTED
Run Code Online (Sandbox Code Playgroud)
不编译,因为如果没有按预期方式转换,则不允许int为a 赋值short.
关于数值文字有什么特别之处吗?
看来,当你在Java中输入一个数字时,编译器会自动将它读作一个整数,这就是为什么当你输入(long)6000000000(不在整数范围内)时,它会抱怨它6000000000不是一个整数.要纠正这个问题,我必须指明6000000000L.我刚刚了解了这个规范.
还有其他数字规格,如short,byte,float,double?这似乎是好事,因为(我假设),如果你可以指定你输入的数字是短的,那么java就不必抛出它 - 这是一个假设,如果我错了,请纠正我.我通常会自己搜索这个问题,但我不知道甚至会调用这种数字规范.
我对shortJava中的原始类型有疑问.我使用的是JDK 1.6.
如果我有以下内容:
short a = 2;
short b = 3;
short c = a + b;
Run Code Online (Sandbox Code Playgroud)
编译器不想编译 - 它说它"无法从int转换为short"并建议我进行转换short,所以这样:
short c = (short) (a + b);
Run Code Online (Sandbox Code Playgroud)
确实有效.但我的问题是为什么我需要施放?a和b的值在short- 范围内 - 短值范围是{-32,768,32767}.我还需要在我想执行操作时进行投射 - ,*,/(我没有检查过其他人).
如果我对原始类型做同样的int事情,我不需要将aa + bb转换为int.以下工作正常:
int aa = 2;
int bb = 3;
int cc = aa +bb;
Run Code Online (Sandbox Code Playgroud)
我在设计一个类时需要添加两个类型为short的变量,并且编译器希望我进行转换.如果我用两个类型的变量做这个int,我不需要强制转换.
一句小话:原始类型也会发生同样的事情byte.所以,这有效:
byte a = 2;
byte b = 3;
byte c = (byte) (a + b); …Run Code Online (Sandbox Code Playgroud) 从我从得到的回答这个问题,看来C++继承了这一要求,对于转换short成int从C.执行算术运算时,我可以挑你的大脑,以为什么这是用C首先介绍?为什么不做这些操作short呢?
例如(取自评论中的dyp建议):
short s = 1, t = 2 ;
auto x = s + t ;
Run Code Online (Sandbox Code Playgroud)
x将具有int类型.
C#中的程序:
short a, b;
a = 10;
b = 10;
a = a + b; // Error : Cannot implicitly convert type 'int' to 'short'.
// we can also write this code by using Arithmetic Assignment Operator as given below
a += b; // But this is running successfully, why?
Console.Write(a);
Run Code Online (Sandbox Code Playgroud) 以下表达式是可以的
short d = ("obj" == "obj" ) ? 1 : 2;
Run Code Online (Sandbox Code Playgroud)
但是当您像下面一样使用它时,会发生语法错误
short d = (DateTime.Now == DateTime.Now) ? 1 : 2;
Run Code Online (Sandbox Code Playgroud)
无法将类型'int'隐式转换为'short'.存在显式转换(您是否错过了演员?)
任何人都可以解释为什么会这样吗?
在三元运算符中比较字符串到字符串和datetime到datetime之间有区别吗,为什么?
如果你能帮助我,我将不胜感激.
如何short在Java中将(2个字节)转换为字节数组,例如
short x = 233;
byte[] ret = new byte[2];
...
Run Code Online (Sandbox Code Playgroud)
它应该是这样的.但不确定.
((0xFF << 8) & x) >> 0;
Run Code Online (Sandbox Code Playgroud)
编辑:
你也可以使用:
java.nio.ByteOrder.nativeOrder();
Run Code Online (Sandbox Code Playgroud)
发现以获取本机位顺序是大还是小.另外,以下代码取自java.io.Bits:
反之亦然.
我有一些问题,将音频数据存储在一个字节数组中,将其转换为大端短数组,对其进行编码,然后将其更改回字节数组.这就是我所拥有的.原始音频数据存储在audioBytes2中.我使用相同的格式进行解码,而cos函数则使用减号.不幸的是,更改字节和短数据类型是不可协商的.
short[] audioData = null;
int nlengthInSamples = audioBytes2.length / 2;
audioData = new short[nlengthInSamples];
for (int i = 0; i < nlengthInSamples; i++) {
short MSB = (short) audioBytes2[2*i+1];
short LSB = (short) audioBytes2[2*i];
audioData[i] = (short) (MSB << 8 | (255 & LSB));
}
int i = 0;
while (i < audioData.length) {
audioData[i] = (short)(audioData[i] + (short)5*Math.cos(2*Math.PI*i/(((Number)EncodeBox.getValue()).intValue())));
i++;
}
short x = 0;
i = 0;
while (i < audioData.length) {
x = audioData[i];
audioBytes2[2*i+1] = (byte)(x …Run Code Online (Sandbox Code Playgroud) 我编写了以下小程序来打印出Fibonacci序列:
static void Main(string[] args)
{
Console.Write("Please give a value for n:");
Int16 n = Int16.Parse(Console.ReadLine());
Int16 firstNo = 0;
Int16 secondNo = 1;
Console.WriteLine(firstNo);
Console.WriteLine(secondNo);
for (Int16 i = 0; i < n; i++)
{
//Problem on this line
Int16 answer = firstNo + secondNo;
Console.WriteLine(answer);
firstNo = secondNo;
secondNo = answer;
}
Console.ReadLine();
}
Run Code Online (Sandbox Code Playgroud)
编译消息是:
无法将类型'int'隐式转换为'short'.存在显式转换(您是否错过了演员?)
由于涉及的所有内容都是Int16(简称),那么为什么会有任何隐式转换?更具体地说,为什么在这里失败(而不是最初为变量赋予int)?
非常感谢您的解释.