练习7-1
int main()
{
int n;
printf("%d %d %d\n", sizeof 1,sizeof(unsigned)-1,sizeof n+2 );
// 4 3 6 因为1的字节就是为4,而-1的字节也是4再减去-1所以显示为3,最后是n+2为6
printf("%d %d %d\n", sizeof +1, sizeof(double) - 1, sizeof(n + 2));
// 4 7 4 因为1的字节是4,double的字节长是8 -1是7,把(n+2)括起来之后使其为一个值,所以是4;
printf("%d %d %d\n", sizeof - 1, sizeof((double)-1), sizeof (n + 2.0) );
// 4 8 8 因为1的字节是4,把double-1都括起来之后,就是double类型字节为8,同理最后也是8
}
练习7-2
C语言pow()函数:求x的y次方的值
语法/原型:
double pow(double x,double y);
#include <stdio.h>
#include <math.h>
int main(void)
{
unsigned x;
int n;
printf("请输入无符号整数:"); scanf_s("%u", &x);
printf("请输入位移的位数:"); scanf_s("%d", &n);
printf("向左位移后是否溢出?\n");
((x << n) == (x * pow(2, n))) ? printf("相等") : printf("不等");
putchar('\n');
printf("向右位移后是否溢出?\n");
((x >> n) == (x / pow(2, n))) ? printf("相等") : printf("不等");
return 0;
}
练习7-3
#include <stdio.h>
unsigned rrotate(unsigned x, int n){
return x >> n;
}
unsigned lrotate(unsigned x, int n){
return x << n;
}
int main()
{
unsigned x;
int n;
printf("输入无符号整数:"); scanf_s("%u", &x);
printf("输入要移动位数:"); scanf_s("%d", &n);
printf("无符号数%u左移%d位结果%u\n", x, n, lrotate(x, n));
printf("无符号数%u右移%d位结果%u\n", x, n, rrotate(x, n));
return 0;
}
练习7-4
unsigned set(unsigned x,int pos)
{
return x |= (1 << pos);
}
unsigned reset(unsigned x, int pos)
{
return x &= ~(1 << pos);
}
unsigned inverse(unsigned x, int pos)
{
return x ^= (1 << pos);
}
int main()
{
int a;
scanf("%d",&a);
set(a,3);
printf("%d\n",set(a,3));//将无符号型整数x的第pos位设置为1
printf("%d\n",reset(a,3));//将无符号型整数x的第n位设置为0
printf("%d\n",inverse(a,3));//将无符号型整数x第pos位取反
return 0;
}
练习7-5
unsigned set_n(unsigned x, int pos, int n) {
int i;
for (i = 0; i < n - pos; i++) {
unsigned mask = (1u << (pos + i));
x = (mask | x);
}
return x;
}
//将无符号型整数第pos位到第(pos+n-1)位的n位设为1
unsigned reset_n(unsigned x, int pos, int n) {
unsigned mask = 1u;
int i;
for (i = 0; i < n-pos; i++) {
if (x & (1u<<pos+i))
x= (x ^ (1u << pos+i));
}
return x;
}
//将无符号型整数第pos位到第n位的n位设为0
unsigned inverse_n(unsigned x, int pos, int n) {
int i;
unsigned mask = 1u;
for (i = 0; i < n - pos; i++) {
x = (x ^ (mask << pos + i));
}
return x;
}
//一个位段都取反
练习7-6
#include <stdio.h>
#include <limits.h>
int main(void)
{
unsigned x, y;
x = UINT_MAX;
y = 0;
printf("x=%u\n", x);
printf("x+1=%u\n", x + 1);
printf("y=%u\n", y);
printf("y-1=%u\n", y - 1);
return 0;
}
练习7-7
#include <stdio.h>
int main(void)
{
float a;
double b;
long double c;
printf("a="); scanf_s("%f", &a);
printf("b="); scanf_s("%lf", &b);
printf("c="); scanf_s("%lf", &c);
printf("a=%f\n", a);
printf("b=%f\n", b);
printf("c=%lf\n", c);
return 0;
}
练习7-8
#include <stdio.h>
int main()
{
float a;
double b;
long double c;
printf("%d,%d,%d",sizeof(a), sizeof(b), sizeof(c));
return 0;
}
练习7-9
#include <stdio.h>
#include<math.h>
int main()
{
double m;
double x;
printf("正方形的面积是:");
scanf("%lf", &m);
printf("边长是:%.2f", sqrt(m));
return 0;
}
练习7-10
#include <stdio.h>
int main()
{
float x;
int i;
float m = 0.0;
for (i = 0; i <= 100; i++) {
x = i / 100.0;
printf("x=%f x=%f\n",m,x);
m += 0.01;
}
return 0;
}
练习7-11
#include <stdio.h>
int main()
{
float x;
int i;
float m = 0.0;
float sum1 = 0;
float sum2 = 0;
for (i = 0; i <= 100; i++) {
x = i / 100.0;
printf("x=%f x=%f\n",m,x);
m += 0.01;
sum1 += m;
sum2 += x;
}
printf("%f,%f", sum1, sum2);
return 0;
}