根据MSDN,Short数据类型由两个字节组成:https://msdn.microsoft.com/en-us/library/47zceaw7.aspx
但是如果我定义一个Short变量,内容总是4个字节:&HFFFFFFFF
Dim crc As Short = CShort(&HFFFFS) ' crc = &HFFFFFFFF
Dim crc As Short = &HFFFFS ' crc = &HFFFFFFFF
Run Code Online (Sandbox Code Playgroud)
这句话甚至给我一个错误:
Dim crc As Short = CShort(&HFFFF) ' Error: Constant expression not representable in type 'Short'
Run Code Online (Sandbox Code Playgroud)
这有什么用?为什么我Short不占用两个字节?
MWE补充道:
Public Function CRC16(ByVal dataFrame As Byte(), ByVal dataLength As Int16) As Int16
Dim index As Int16
Dim crc As Short = &HFFFFS
For iCount As Int16 = 0 To CShort(dataLength - …Run Code Online (Sandbox Code Playgroud) 我需要PHP中的一些帮助来创建简短的URL,就像StackOverflow在我们在一个问题的评论中评论任何长URL时创建的那样.
StackOverflow将http://www.noupe.com/how-tos/10-ways-to-automatically-manually-backup-mysql-database.html长网址缩短为这样的短网址noupe.com/...
我的应用程序中需要类似的功能.任何人都可以在PHP中提供一些想法或代码如何做到这一点?
我厌倦了在StackOverflow上搜索它,但没有发现任何问题.我记得我在SO上看过这样的问题,但是现在我无法找到它:(
请帮忙!
我已经读过使用shortvs int实际上为编译器创建了一个低效率,因为它需要使用int数据类型,而不管C整数提升.对16位微处理器来说这是真的吗?
另一个问题:如果我有一个1和0的数组,使用它uint8_t或unsigned char16位微处理器是否最有效?或者它仍然存在转换回int的问题.
请帮我澄清这个泥泞的问题.谢谢!
我有一个项目,其中我有许多具有许多属性的对象,其值始终小于60,100和255之类的小数字.
我知道在进行数学运算时byte,有必要投射结果.但除此之外,使用a byte或者short所有这些属性是否有任何不利之处?或者另一种看待它的方式,使用bytes或shorts而不是int?
我试图尽可能地挤出我的记忆.我有一个4.9999995e13整数矩阵,但它们只需要是真或假 - 基本上我只需要为这些整数中的每一个存储一位.
我知道C中没有单一的位类型(也许有人可以解释为什么,对我来说),而且我也知道如果short short int存在它将是1字节,与char相同.但是,C中的所有逻辑运算都返回整数(以及一些其他函数).
所以我的问题是:
short short int存在?char,那么我是否会因为所有int必须完成的铸造而降低性能?只是在案件中它是相关的,我正在与GCC编译C99.
编辑我刚刚在这个维基百科页面上看到有一种_Bool类型,这实际上是标准的吗?
我有两个不同的数据结构,原则上应该具有相同的大小,我想知道他们为什么不这样做.
struct pix1 {
unsigned char r;
unsigned char g;
unsigned char b;
unsigned char a;
unsigned char y[2];
};
struct pix2 {
unsigned char r;
unsigned char g;
unsigned char b;
unsigned char a;
unsigned short y;
};
Run Code Online (Sandbox Code Playgroud)
然后,我将这些像素中的四个组合在一起,如下:
struct pix4 {
pix1 pixels[4]; // or pix2 pixels[4]
unsigned char mask;
};
Run Code Online (Sandbox Code Playgroud)
...但事实证明,根据sizeof(pix4),这种分组的大小会发生变化,具体取决于我是使用pix1还是pix2.个别sizeof(pix1)== sizeof(pix2),所以我很困惑为什么分组四像素会改变大小.我关心的是因为用2个无符号字符来编写带有短路的程序比较容易,但是每个像素耗费我0.25个字节.
我不确定这个架构是否具体,因为我没有在其他类型的机器上测试过.它可以对齐吗?这是我需要担心的事情,还是我可以继续执行简短的实施?
感谢您的帮助.
java代码:,
byte a_b = 12;
short c_d = 14
Run Code Online (Sandbox Code Playgroud)
用字节码替换
bipush 12 // expands byte1 (a byte type) to an int and pushes it onto the stack
sipush 14 // expands byte1, byte2 (a short type) to an int and pushes it onto the stack
Run Code Online (Sandbox Code Playgroud)
为什么jvm会进行扩展,而不是使用byte和short?
当我打开我的文件的字节码时
编辑:short var = 14被bipush 14取代而不是sipush 14
我的理解不清楚还是有错误?

我正在使用以下版本
java version "1.6.0_26"
Java(TM) SE Runtime Environment (build 1.6.0_26-b03)
Java HotSpot(TM) Client VM (build 20.1-b02, mixed mode, sharing)
Run Code Online (Sandbox Code Playgroud) 在java中输出short的二进制表示是否有内置支持?
当然,这个,建议使用Integer.toBinaryString(),它的工作原理.没有类似的Short.toBinaryString().还有其他什么吗?
更新: Integer.toBinaryString()不能像Short.toBinaryString()一样工作,如果它存在的话.
public static void main(String[] args) {
System.out.println(Integer.toBinaryString(Short.MIN_VALUE));
}
Run Code Online (Sandbox Code Playgroud)
产生
11111111111111111000000000000000
Run Code Online (Sandbox Code Playgroud)
而我想看到
1000000000000000
Run Code Online (Sandbox Code Playgroud)
当然,切掉前16位数字很容易,但这是我的观点.这种方法应该存在.
我有这个正弦波产生浮点值(例如0.37885),但我希望它们作为短路.短流程直接铸造给我的值为0.那么解决方案是什么?
任何人都可以告诉我如何做到这一点 - 理想情况下不会损失精确度 - 或者如果可能的话,最小的精度损失最小化?
我正在研究K&R的练习2-1,目标是计算不同变量类型的范围,下面是我计算short int可以包含的最大值的函数:
short int max_short(void) {
short int i = 1, j = 0, k = 0;
while (i > k) {
k = i;
if (((short int)2 * i) > (short int)0)
i *= 2;
else {
j = i;
while (i + j <= (short int)0)
j /= 2;
i += j;
}
}
return i;
}
Run Code Online (Sandbox Code Playgroud)
我的问题是这个函数返回的值是:-32768这显然是错误的,因为我期待一个正值.我无法弄清楚问题出在哪里,我使用相同的函数(在变量类型中有变化)来计算int可以包含的最大值,并且它有效...
我虽然问题可能是由于if和while语句内部的比较引起的,因此类型转换却没有帮助......
是什么原因引起了这个?提前致谢!
编辑:感谢Antti Haapala的解释,符号位的溢出导致未定义的行为,而不是负值.