明解c语言答案第八章,《明解C语言》笔记及课后习题答案 【第七章】

练习7-2

/*编写一个程序,确认只要没有发生高位溢出,则:

无符号整数位左移后的值等于其乘以2的指数幂后的值。

无符号整数位右移后的值等于其除以2的指数幂后的值。*/

#include #include int main(void)

{

unsigned uns_int;

puts("请输入一个整数:");

do{

scanf("%u",&uns_int);

if(uns_int > UINT_MAX)

printf("您输入的整型过大,请重新输入。");

} while (uns_int > UINT_MAX);

printf("把整数向左移动3位后其值等于其乘以2的指数幂后的值:%u = %u\n",uns_int << 3, uns_int*2*2*2);

printf("把整数向右移动3位后其值等于其乘以2的指数幂后的值:%u = %u",uns_int >> 3, uns_int/2/2/2);

return 0;

}

练习7-3

/*---编写rrotate函数,返回无符号整数x右移n位后的值。

编写lrotate函数,返回无符号整数x左移n位后的值。---*/

#include unsigned rrotate(unsigned x, int n){

return x >> n;

}

unsigned lrotate(unsigned x, int n){

return x << n;

}

int main (void){

unsigned uns_int;

int move_bits;

printf("请输入整数和移动位数:");

scanf("%d %d",&uns_int, &move_bits);

printf("%u向右移%d次后的值:%u\n",uns_int, move_bits, rrotate(uns_int, move_bits));

printf("%u向左移%d次后的值:%u",uns_int, move_bits, lrotate(uns_int, move_bits));

return 0;

}

练习7-4

/*---编写set函数,返回将无符号整数x的第pos位设为1后的值。---*/

//二进制的最右边位为第零位。

#include unsigned set(unsigned x, int pos){

unsigned i = 1;

return x | (i << pos);

}

unsigned reset(unsigned x, int pos){

unsigned i = 1;

return x & ~(i << pos);

}

unsigned inverse(unsigned x, int pos){

unsigned i = 1;

return x ^ (i << pos);

}

int main(void)

{

unsigned i, pos;

printf("请输入整型数及要操作的位数:");

scanf("%u %u",&i ,&pos);

printf("将第%d位设为1后的值%d\n",pos,set(i, pos));

printf("将第%d位设为0后的值%d\n",pos,reset(i, pos));

printf("将第%d位取反后的值%d",pos,inverse(i, pos));

return 0;

}

练习7-6

/*---编程确认对无符号整数执行算术运算不会发生数据溢出。---*/

#include #include int main(void)

{

unsigned i, j;

printf("无符号整型的最大值为: %u\n",UINT_MAX);

puts("请输入一个整型数:");

scanf("%u", &i);

printf("将无符号整形最大值与输入整型数相加:%u",UINT_MAX + i);

return 0;

}

练习7-7

/*---从键盘输入float型,double型,long double型的变量,并显示其值。---*/

#include int main (void)

{

float fl;

double db;

long double ldb = 4.55;

puts("请依次输入三个浮点数:");

scanf("%f %lf",&fl, &db);

printf("float型:%f\ndouble型:%f\nlong double型:%Lf",fl, db, ldb);

return 0;

}

练习7-8

/*---显示三种浮点型的长度---*/

#include int main(void)

{

float fl;

double db;

long double ldb;

printf("float length %d\ndoble length %d\nlong double length %d", (unsigned)sizeof(fl), (unsigned)sizeof(db), (unsigned)sizeof(ldb));

return 0;

}

练习7-9

/*---输入一个实数作为面积,求面积为该实数的正方形的边长。---*/

#include #include int main(void)

{

int area;

puts("请输入一个正方形的面积:");

scanf("%d", &area);

printf("该正方形的边长为:%f",sqrt(area));

return 0;

}

练习7-10

/*横向显示代码,以0.01为单位将float型变量由0.0递增为1.00的过程。*/

#include int main(void)

{

int i;

float x, j = 0;

for (i = 0; i <= 100; i++) {

printf("x = %f ", j);

j+=0.01;

x = i / 100.0;

printf("x = %f\n",x);

}

return 0;

}

算术类型

2979078244bce465048d301966e7502a.png

字符型,整型的名称和简称

e30bb590ee344994afdb6eed17e26ee1.jpg

逻辑位移:逻辑唯一不考虑符号位,所有二进制位都进行位移。负整数右移时,符号位由1变为0,位移的结果为0或正整数。

算术位移:算术位移会保留最高位的符号位,只有其他位会进行位移。用位移前的符号位来填补空位。位移前的符号位来填补空位。位移前后符号不变。

与运算符:&(有0则0)

或运算符: | (有1则1)

异或运算符:^  (同0异1)

非运算符: ~

数据溢出和异常:因数据溢出(overflow)(溢位)使运算结果超出可表示的数值范围或违反数学定义(除以0等)时会发生异常(exception)。发生异常时程序如何运行是由编译器决定的。实际上,并非所有的运算中都会发生异常。无符号整数型的运算不会发生数据溢出。当无符号整型的运算结果超出最大值时,结果为“数学运算结果%(该无符号整型能够表示的最大值+1)"。

运算符一览表

7469501f9f844f83bad4a59629fc86ab.jpg

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值