c语言中16进制0x80000转为short类型为什么是-32768负数?求解

如题所述

0x80000首位为1,所以首先肯定是负数,关键就是负多少的问题。
在计算机中,数值是使用补码表示。
正数的补码与原码相同。

负数的补码等于其绝对值的原码各位取反,然后整个数加1的数值。

同一个数字在不同的补码表示形式里头,是不同的。比方说-15的补码,在8位二进制里头是11110001,然而在16位二进制补码表示的情况下,就成了1111111111110001。在这篇补码概述里头涉及的补码转换默认把一个数转换成8位二进制的补码形式,每一种补码表示形式都只能表示有限的数字。
所以0x80000在short类型16位时就正好是-32768了
温馨提示:内容为网友见解,仅供参考
第1个回答  2013-11-08
你多写了一个0吧,0x80000转为short结果是0,0x8000转short后,符号为也就是最高位为1,为负数,负数使用补码表示的,因此是负2的15次方,也就是-128*256
第2个回答  2013-11-08
void ILI9341_CMI 2.4_Initial(void)
{
// VCI=2.8V
//************* Reset LCD Driver ****************//
LCD_nRESET = 1;
delayms(1); // Delay 1ms
LCD_nRESET = 0;
delayms(10); // Delay 10ms // This delay time is necessary
LCD_nRESET = 1;
delayms(120); // Delay 120 ms

//************* Start Initial Sequence **********//
LCD_ILI9341_CMD(0xCF);
LCD_ILI9341_ Parameter (0x00);
LCD_ILI9341_ Parameter (0xC1);
LCD_ILI9341_ Parameter (0X30);

LCD_ILI9341_CMD(0xED);
LCD_ILI9341_ Parameter (0x64);
LCD_ILI9341_ Parameter (0x03);
LCD_ILI9341_ Parameter (0X12);
LCD_ILI9341_ Parameter (0X81);

LCD_ILI9341_CMD(0xE8);
LCD_ILI9341_ Parameter (0x85);
LCD_ILI9341_ Parameter (0x00);
LCD_ILI9341_ Parameter (0x78);

LCD_ILI9341_CMD(0xCB);
LCD_ILI9341_ Parameter (0x39);
LCD_ILI9341_ Parameter (0x2C);
LCD_ILI9341_ Parameter (0x00);
LCD_ILI9341_ Parameter (0x34);
LCD_ILI9341_ Parameter (0x02);

LCD_ILI9341_CMD(0xF7);
LCD_ILI9341_ Parameter (0x20);

LCD_ILI9341_CMD(0xEA);
LCD_ILI9341_ Parameter (0x00);
LCD_ILI9341_ Parameter (0x00);

LCD_ILI9341_CMD(0xC0); //Power control
LCD_ILI9341_ Parameter (0x1F); //VRH[5:0] 18

LCD_ILI9341_CMD(0xC1); //Power control
LCD_ILI9341_ Parameter (0x13); //SAP[2:0];BT[3:0]

LCD_ILI9341_CMD(0xC5); //VCM control
LCD_ILI9341_ Parameter (0x32);
LCD_ILI9341_ Parameter (0x3C);

LCD_ILI9341_CMD(0xC7); //VCM control2
LCD_ILI9341_ Parameter (0X96);

LCD_ILI9341_CMD(0x36); // Memory Access Control
LCD_ILI9341_ Parameter (0x08);

LCD_ILI9341_CMD(0x3A);
LCD_ILI9341_ Parameter (0x55);
LCD_ILI9341_CMD(0xB1);
LCD_ILI9341_ Parameter (0x00);
LCD_ILI9341_ Parameter (0x18);

LCD_ILI9341_CMD(0xB6); // Display Function Control
LCD_ILI9341_ Parameter (0x0A);
LCD_ILI9341_ Parameter (0xA2);
LCD_ILI9341_CMD(0xF2); // 3Gamma Function Disable
LCD_ILI9341_ Parameter (0x00);

LCD_ILI9341_CMD(0x26); //Gamma curve selected
LCD_ILI9341_ Parameter (0x01);

LCD_ILI9341_CMD(0xE0); //Set Gamma
LCD_ILI9341_ Parameter (0x0F);
LCD_ILI9341_ Parameter (0x1D);
LCD_ILI9341_ Parameter (0x1A);
LCD_ILI9341_ Parameter (0x0A);
LCD_ILI9341_ Parameter (0x0D);
LCD_ILI9341_ Parameter (0x07);
LCD_ILI9341_ Parameter (0x49);
LCD_ILI9341_ Parameter (0X66);
LCD_ILI9341_ Parameter (0x3B);
LCD_ILI9341_ Parameter (0x07);
LCD_ILI9341_ Parameter (0x11);
LCD_ILI9341_ Parameter (0x01);
LCD_ILI9341_ Parameter (0x09);
LCD_ILI9341_ Parameter (0x05);
LCD_ILI9341_ Parameter (0x04);

LCD_ILI9341_CMD(0XE1); //Set Gamma
LCD_ILI9341_ Parameter (0x00);
LCD_ILI9341_ Parameter (0x18);
LCD_ILI9341_ Parameter (0x1D);
LCD_ILI9341_ Parameter (0x02);
LCD_ILI9341_ Parameter (0x0F);
LCD_ILI9341_ Parameter (0x04);
LCD_ILI9341_ Parameter (0x36);
LCD_ILI9341_ Parameter (0x13);
LCD_ILI9341_ Parameter (0x4C);
LCD_ILI9341_ Parameter (0x07);
LCD_ILI9341_ Parameter (0x13);
LCD_ILI9341_ Parameter (0x0F);
LCD_ILI9341_ Parameter (0x2E);
LCD_ILI9341_ Parameter (0x2F);
LCD_ILI9341_ Parameter (0x05);

LCD_ILI9341_CMD(0x11); //Exit Sleep
Delayms(120);
LCD_ILI9341_CMD(0x29); //Display on
}

xiecuole,buhaoyisi.

c语言中16进制0x80000转为short类型为什么是-32768负数?求解
所以0x80000在short类型16位时就正好是-32768了

C语言数据类型的转换
1) 若参与运算量的类型不同,则先转换成同一类型,然后进行运算。2) 转换按数据长度增加的方向进行,以保证精度不降低。如int型和long型运算时,先把int量转成long型后再进行运算。a.若两种类型的字节数不同,转换成字节数高的类型 b.若两种类型的字节数相同,且一种有符号,一种无符号,则转换成...

相似回答