发布网友 发布时间:2024-09-29 10:06
共1个回答
热心网友 时间:2024-09-29 10:27
#include <stdio.h> main() { unsigned char a=8,c; c=a>>3; printf("%d\n",c); } 程式执行后的结果是?
c=a>>3 c这个变数没有定义?
=00001000>>3
=00000001
=1
因此,程式执行结果为:1
八进位制 376
二进位制 1111 1110
十六进位制 FE %X
10 进位制有符号 -2 %d
10 进位制无符号 254 %u
试了一下,结果是:-2.
-2 因为 对char型来说8进位制376就是-2
#include<stdio.h> main() { char a; a=255; printf("%d\n",a++); } 结果是:-1 a++没有用,他返回的是++之前的值,还是255.
char是一个8位的有符号型别,他的取值范围是-128 ~ 127,当超过最大值时,自动从最小值开始往上加,也就是说如果a=128,那么他实际上是-128。
255 = 128 + 127 = -128 + 127 = -1
char只有1个位元组(BYTE),也就是8个位(bit)
您的char c=256;256用二进位制表示的话是100000000,也就是低8位全部为0。而char型别的c只能储存8bit的资料(也就是低8位)所以实际上c=0。
同理,255的二进位制表达方式为11111111,因为char型别是有符号的型别(其对应的无符号型别为unsigned char),所以其最高位为符号位,符号位为0时时正数,为1是负数。而取值方法使用“补码"。
至于补码的详细资讯,请参考
相信看完之后您就理解了。
你的程式只是定义了一个n,却没有给n赋值,输出的结果当然是乱七八糟的啦!看来你还刚接触C语言,呵呵。
#include<stdio.h>main(){inta=12,c;c=(a<<2)<<1;printf("%d\n",c);}程式执行结果是多少,麻烦写详细点,结果是96
a=12;
a<<2;/*a左移运算 相当于乘法 左移一位为乘2,两位就乘4 */
(a<<2)<<1;/* 再左移一位 再乘2 c=a*2*2*2=12*8=96 */
A
纠正一下 printf("%d\n",NULL); 中那个是NULL不是NILL
应该在stdio.h这个标头档案中有预处理:
#define NULL 0
a>b>c是从左向右计算的:(a>b)>c,先计算a>b结果为真,也就是1,再用这个结果计算1>c,结果为假。