-
如果编译器将 char 视为无符号 char,则 x 为正 255;
如果编译器将 char 视为有符号 char,则 x 的第一位是符号位 1,0xff的值为 -1(即补码 0xff 的原始代码);
如果编译器真的将其视为有符号字符:以下是一个陷阱
char x=0xff;在这一点上 x!=0xff,但 x=0xffffffff(char 实际上像 int 一样占用 4 个字节的存储空间,空位填充 1),而 unsigned char 则没有这个问题(所有空位都用 0 填充)。
字符 x=-1; 则 x==-1 为 true。
-
x的值:十六进制ff
基地 255
基地 377
基地 2 1111 1111
ASCII 普通字符仅编码为0x7f
ff 是一个特殊字符,用于 Unicode 文件的标头中的特殊标记:fffe 或 feff 表示 big-and-little-endian。
-
ASC 查找表中 255 对应的字符为空,即空白字符。
-
0xffff,它是十六进制的 ffff,它是 1111 1111 1111 1111(2 * 8 = 16 位,2 个字节)。
但是因为 char 类型只占用 1 个字节,所以它只有一个有效的0xff,而且因为默认是有符号数,所以最高的位 1 代表负数,其余的都是 -1,根据补码设置的规则0xff它是十进制的 -1
-
这是因为 char 的值范围为 0 到 127
0xffff超越了这一点。
所以 x 的值是 -1
-
x 等于 oxffff 的十六进制值,即 65535
-
执行以下程序段。
int x = 40;
char z = 'b';
int b;
b = ( x&0xff )&z>'a') 后面的 b 值为 ( )。
正确答案是0
我将在下面向您解释。
( x&0xff )
OX 表示十六进制。
oxff 的二进制是 0000 0000 1111 1111,那么 x&0xff 表示将 x 的值与上面的二进制数进行比较,例如 x = 40,那么它对应的二进制是 0000 0000 0010 1000
也就是说,它仍然是 40 岁,0xff。
( z > 'a' )
那么对于字符 z,其初始值为'b'
然后 z >'a'此表达式的值为 false。
为什么,因为在 ASCII 代码中,'b'ASCII 为 66,并且'a'ASCII 为 97
因为 97 > 66,所以 z <'a'而不是 z >'a'
因此表达式 (z >'a') 为 false & 操作。
左边是 40,在 C 中 0 是假的,不是零是真的,那么左边是真的
向右是假的
则整个表达式的值必须为 false。
所以最后 b = 0
就是这样。
-
使用窗口中自带的计算器转换十六进制FFFF,结果如下:
十进制为:65535;
八进制为:177777;
二进制文件为:11111111111111111ps:如果使用程序进行转换,可能会出现类型溢出错误;
-
十六进制 f 转换为二进制是 1111,所以这个0xffff是 1111 1111 1111 1111,十进制为 65535。
char 类型不能直接用于计算,这里的输出是整数,所以报错,返回值为 -1当返回值超出界外或出现任何错误时,返回值的返回值似乎是 -1,而 -1 并不代表此处的计算结果。
-
输出为 -1。 在输出函数中,x 首先是输出值,然后减去 1。
0xff是一个十六进制数,作为二进制11111111存储在内存中,变量x是有符号的,即11111111是有符号数,最高位1是表示负数的符号位,按照补码的形式换算成其原码,即 11111111的最后一位减去1后倒位,即为00000001,即为1,最后加上负号为-1。
-
0xffff是十六进制的,转换为二进制转换为11111111 11111111。 char 类型是一个字节,明显是溢出的,只能取后面的八位(即接下来的八个 1),而 char 是有符号的字符,11111111转换为十进制是 -1。
-
答案-1
过程:char 为有符号数字,char x=0xffff; 得到 x=0xff 是 -1
pritnf("%,x--");先输出 x 值,然后输出 -- 所以输出 -1
-
0xffff 是一个十六进制表示,转换为二进制表示为 1111 1111 1111 1111,%d 是用 int 输出它。
二进制“1111 1111 1111 1111 1111”有一个负数(非负数的最高数字为 0),它由补码表示。
从补码恢复到原码的原理是:除符号位外,末尾减去 1 后,取否定:
末尾减去 1:除符号位外,取否定:
即 - 0000 0000 0000 0001,即 -1。
所以最终输出:-1
-
您应该询问有关格式化输出的问题。
d 输出为有符号十进制整数,因此它是 10,d 是有符号十进制整数。
i 是有符号十进制整数。
o 有符号的西方整数。
u 无符号十进制整数。
x 是一个无符号的十六进制数,用小写的 abcdef 表示 x 无符号十六进制数,用大写的 abcdef 表示 f f 浮点数。
e e 科学表示格式的浮点数。
g 表示浮点数,使用 %f 和 %e 表示中的最短位数 g 采用相同的 G 格式,但为指数。
c 单字。
s 字符串。
-
char 在一个字节中只有 8 位,只有后面的 8 位可以保留11111111转换为十进制的 -1
-
使用窗口中自带的计算器转换十六进制FFFF,结果如下:
十进制为:65535;
八进制为:177777;
二进制文件为:11111111111111111ps:如果使用程序进行转换,可能会出现类型溢出错误;
-
“*p is char” 为 true,但 value = (int)*p; 在同一句话中,*p 被强制通过 char to int 分配给 value,因此 value 是 int,其值被解释为 4 个字节。 此外,printf("%02x", p, value);这句话是错的,所以不能详细分析。