例如:
android:icon="@mipmap/ic_app_icon"
这将输出-1。无论如何要手工推出?
答案 0 :(得分:5)
为了手动推导,您需要了解系统的几个实现定义方面 - 即
char
已签名char
已签名,则使用什么表示方案虽然标准允许实现决定,但缩小转换的一种非常常见的方法是截断不适合窄类型的位。假设这是您的系统采用的方法,计算输出的第一部分是找到被转换的int
值的最后8位。在你的情况下,65535是1111111111111111 2 ,所以后8位都是1。
现在你需要决定11111111 2 的解释。在您的系统上char
已签名,系统使用负值的二进制补码表示,因此此模式被解释为八位-1
值。
当您致电printf
时,签名char
的8位值会提升为int
,因此会打印保留的值。
在默认情况下char
未签名的系统上,相同的模式将被解释为255。
答案 1 :(得分:4)
65535
是0xffff
转换为char时,左边的位保持不变:
0xffff
和0xff
是0xff
将char传递给函数时,它会扩展为int。由于char的最左边的位是1,这将是符号扩展的,因此它将变为0xffffffff
(32位)
这是-1
,因此打印为-1。
unsigned char y
),都很重要。我的最后一行将读取unsigned char:
将未编译的char传递给函数时,它会扩展为unsigned int。因为它是无符号的,所以在左边只添加了零,因此它将变为0x000000ff
(32位)。
这是255
,所以255打印为。
答案 2 :(得分:0)
binary
时, 65535为1111111111111111
。
当你将它分配给一个字符变量时,它会被修剪为最低有效8位,即11111111
。
这相当于Binary
中的-1。任何数字的2's complement
都会给出negative value
,因此2的补码为00000001:
11111110 + 1 = 11111111是-1。
答案 3 :(得分:0)
\java
' x'的价值65535相当于十六进制的int x = 65535;
,表示2字节(16位)数。
然后' x'的价值正在转变为角色' y'并且字符数据类型的大小是1字节(8位)。所以x的右侧值是截止的,同时分配给' y'因为它只有1B内存空间。
所以' y'的价值是0xffff (binary = 1111 1111 1111 1111)
,它等于有符号数字整数表示中的0xff (binary = 1111 1111)
。
我们正在展示' y'按整数表示的字符值由'%d'