我不明白为什么printf
下面的代码中的最后一个不打印255.
char c;
c = c & 0;
printf("The value of c is %d", (int)c);
int j = 255;
c = (c | j);
printf("The value of c is %d", (int)c);
Run Code Online (Sandbox Code Playgroud)
Seb*_*olm 16
在大多数实现的char
类型是有符号的,所以它的范围是从-128
到127
.
这意味着,11111111
(255
以二进制编写)等于-1
.(因为它表示为存储在二进制补码中的值)
要获得您期望的结果,您需要声明c
为a unsigned char
,如下所示:
unsigned char c = 0;
int j = 255;
c = (c | j);
printf("The value of c is %d", (int)c);
Run Code Online (Sandbox Code Playgroud)
它可能打印-1.那是因为
c = (c | j);
Run Code Online (Sandbox Code Playgroud)
将评估为
c = (0 | 255) = (0 | 0xFF) = 0xFF
Run Code Online (Sandbox Code Playgroud)
但是,自c
签名以来,0xFF
将是-1而不是255,如你所料.如果您更改c
到unsigned char
它会打印255,因为你的想象.
归档时间: |
|
查看次数: |
398 次 |
最近记录: |