寒假刷题之原码/反码/补码

简介: 寒假刷题之原码/反码/补码
 1.原码、反码、补码说法错误的是( )💗

A .一个数的原码是这个数直接转换成二进制

B .反码是原码的二进制符号位不变,其他位按位取反

C .补码是反码的二进制加1

D .原码、反码、补码的最高位是0表示负数,最高位是1表示正数

D.原码、反码、补码的最高位是符号位0表示正数,1表示负数。
2.程序的执行结果为( )💗
int main()
{
  unsigned char a = 200;
  unsigned char b = 100;
  unsigned char c = 0;
  c = a + b;
  printf(“%d %d”, a+b,c);
  return 0;
}

image.gif

A .300 300

B .44 44

C .300 44

D .44 30

分析如下:结果为 C
unsigned char a = 200;
//unsigned 原反补相同:0000 0000 0000 0000 0000 0000 1100 1000
//整型提升:1100 1000--->0000 0000 0000 0000 0000 0000 1100 1000
unsigned char b = 100;
//unsigned 原反补相同:0000 0000 0000 0000 0000 0000 0110 0100
//整型提升:0110 0100--->0000 0000 0000 0000 0000 0000 0110 0100
//加法:
0000 0000 0000 0000 0000 0000 1100 1000
0000 0000 0000 0000 0000 0000 0110 0100
//结果:0000 0000 0000 0000 0000 0001 0010 1100---》300
//char c整型提升:0000 0000 0000 0000 0000 0000 0010 1100---》44
unsigned char c = 0;
c = a + b;

image.gif

3.unsigned int a= 0x1234; unsigned char b=*(unsigned char *)&a;在32位大端模式处理器上变量b等于( )💗

A .0x00

B .0x12

C .0x34

D .0x1234

unsigned int a= 0x1234;
unsigned char b = *(unsigned char *)&a
//大端处理器:高地址对应低位,低地址对应高位
//低地址开始:00 00 12 34
//内存中:解引用结果为:00

image.gif

选择 A
4.关于大小端字节序的描述正确的是( )💗

A .大小端字节序指的是数据在电脑上存储的二进制位顺序

B .大小端字节序指的是数据在电脑上存储的字节顺序

C .大端字节序是把数据的高字节内容存放到高地址,低字节内容存放在低地址处

D .小端字节序是把数据的高字节内容存放到低地址,低字节内容存放在高地址处

大小端字节序指的是数据在电脑上存储的字节顺序。大端字节序存储是把数据的高位存放在低地址处,低位存放在高地址处。小段字节序存储是把数据的高位放在高地址处,低位放在低地址处。
5.猜名次🌜智力题培训🌛

5位运动员参加了10米台跳水比赛,有人让他们预测比赛结果:

A选手说:B第二,我第三;

B选手说:我第二,E第四;

C选手说:我第一,D第二;

D选手说:C最后,我第三;

E选手说:我第四,A第一;

比赛结束后,每位选手都说对了一半,请编程确定比赛的名次。

//答案:
//5位运动员参加了10米台跳水比赛,有人让他们预测比赛结果:
//A选手说:B第二,我第三;b=2 + a=3 = 1
//B选手说:我第二,E第四;b=2 + e=4 = 1
//C选手说:我第一,D第二;c=1 + d=2 = 1
//D选手说:C最后,我第三;c=5 + d=3 = 1
//E选手说:我第四,A第一;e=4 + a=1 = 1
//比赛结束后,每位选手都说对了一半,请编程确定比赛的名次。(相加结果为真=1)
//穷举法---->
int main()
{
    int a = 0;
    int b = 0;
    int c = 0;
    int d = 0;
    int e = 0;
    for (a = 1; a <= 5; a++)
    {
        for (b = 1; b <= 5; b++)
        {
            for (c = 1; c <= 5; c++)
            {
                for (d = 1; d <= 5; d++)
                {
                    for (e = 1; e <= 5; e++)
                    {
                        if ((((b == 2) + (a == 3))==1)//条件为真执行下面的结果
                            && (((b == 2) + (e == 4))==1)
                            && (((c == 1) + (d == 2))==1)
                            && (((c == 5) + (d == 3))==1)
                            && (((e == 4) + (a == 1)))==1)
                        {
                            if (a * b * c * d * e == 120)//隐含条件:防止穷举法出现重复元素
                            {
                                printf("a=%d,b=%d,c=%d,d=%d,e=%d\n", a, b, c, d, e);
                            }
                        }
                    }
                }
            }
        }
    }
    return 0;
}

image.gif

6.猜凶手🌜智力题培训🌛

日本某地发生了一件谋杀案,警察通过排查确定杀人凶手必为4个嫌疑犯的一个。

以下为4个嫌疑犯的供词:

A说:不是我。

B说:是C。

C说:是D。

D说:C在胡说

已知3个人说了真话,1个人说的是假话。

分析:分别假设凶手是A/B/C/D,然后三个人为真一个人为假。
//答案:
//日本某地发生了一件谋杀案,警察通过排查确定杀人凶手必为4个嫌疑犯的一个。
//以下为4个嫌疑犯的供词 :
//A说:不是我。
//B说:是C。
//C说:是D。
//D说:C在胡说
//已知3个人说了真话,1个人说的是假话。
int main()
{
    char killer = 0;
    for (killer = 'A'; killer <= 'D'; killer++)
    {
        if ((killer != 'A') + (killer == 'C') + (killer == 'D') + (killer != 'D') == 3)
        {
            printf("凶手是%c\n", killer);
        }
    }
    return 0;
}

image.gif

第五题和第六题考察:我们如何通过问题的描述实现编程,此时需要细心思考!
7.在屏幕上打印杨辉三角。❗❗C技能必备

1

1 1

1 2 1

1 3 3 1

……

//答案:
int main()
{
    int i = 0;
    //打印10行10列,通过二维数组确定
    int arr[10][10] = { 0 };
    //通过规律发现:杨辉三角的每一行的第一个元素和每一行的最后一个元素都是1,实现如下:
    for (i = 0; i < 10; i++)
    {
        arr[i][i] = 1;
        arr[i][0] = 1;
    }
    //杨辉三角从第三行开始,我们发现第三行的第二个元素=第二行的第一个元素+第二行的第二个元素。第四行的第二个元素=第三行第一个元素+第三行第二个元素。以此类推得到规律。
    //所以i=2从第三行开始,j=1或j=0都可。
    for (i = 2; i < 10; i++)
    {
        int j = 0;
        for (j = 1; j < 10; j++)
        {
            arr[i][j] = arr[i - 1][j - 1] + arr[i - 1][j];
        }
    }
    //实现打印功能
    for (i = 0; i < 10; i++)
    {
        int j = 0;
        for (j = 0; j <= i; j++)
        {
            printf("%d ", arr[i][j]);
        }printf("\n");
    }
    return 0;
}

image.gif

8.赛马找最快🌜智力题🌛

有36匹马6个跑道,没有计时器。最少进行多少次赛马能确定前三名?

分析:首先我们将36匹马分成6组分别在6个跑道赛马,进行6次。其次,我们将6组的第一名选择后再进行一次赛马,结果可以选择出36匹马的第一名,这是第七次赛马,但是第二名和第三名无法确定。此时第二名可能在第一名的组里,第三名也可能在第一名的组里,或者在其他组。所以我们选择第一名所在组的前三名,再选择第七次赛马的第二名所在组的前两名,再选择第七次赛马的第三名进行一次赛马,这是第八次赛马,最终决定36匹马的前三名。

image.gif编辑

9.烧香🌜智力题🌛

有两根香材质不均匀,但是每一根香燃烧完都需要1个小时。现在你有两根香,问用烧熏香的方法如何确定一个15分钟的时间段?

分析:由于两根香的材质不均匀,可能一半烧的快一半烧的慢,所以不可以掰断处理。我们将第一根香两头点着,另一根香先点着右端,同时点着后我们先烧半个小时。此时发现第一根香由于两头点着烧的快已经烧完啦,第二根香由于只点燃右端烧了半个小时。此时我们点燃第二根香的左端,右端不熄灭,当第二根香烧完的时候就是一个15分钟的时间段。

image.gif编辑


目录
相关文章
|
7月前
|
存储 编译器 C语言
【原码、反码、补码】小白看完都呲大牙
【原码、反码、补码】小白看完都呲大牙
232 1
【原码、反码、补码】小白看完都呲大牙
|
20天前
|
C语言
【C语言】原码、反码、补码详解 -《码上有道 ! 》
在计算机科学中,整数的表示方式有多种,包括原码、反码和补码。这些表示方式主要用于解决整数的二进制表示和计算问题。本文将详细介绍这三种表示方法,并通过示例来说明它们的原理和应用,特别是它们在C语言中的应用。
84 5
|
2月前
让星星⭐月亮告诉你,原码、反码、补码以及为什么要用反码和补码
机器数是数在计算机中的二进制表示,最高位表示符号。真值是机器数对应的实际数值。原码、反码、补码分别是数的不同二进制表示方式,其中补码解决了0的表示问题及简化了计算机的运算设计,使得计算机只需实现加法器即可完成加减运算。
84 2
|
2月前
深入解析计算机科学的基础:原码、反码与补码
深入解析计算机科学的基础:原码、反码与补码
|
6月前
|
程序员
程序员必知:原码、反码、补码和移码详解
程序员必知:原码、反码、补码和移码详解
105 0
【软考学习2】数据表示——原码 反码 补码 移码
【软考学习2】数据表示——原码 反码 补码 移码
145 0
|
7月前
|
存储 Java
JavaSE - 原码,反码,补码和>>以及>>>
JavaSE - 原码,反码,补码和>>以及>>>
88 0
|
7月前
【中级软件设计师】—(针对上午题)原码与反码、补码和移码(十二)
【中级软件设计师】—(针对上午题)原码与反码、补码和移码(十二)
【408计算机组成原理】—原码、反码、补码、移码(六)
【408计算机组成原理】—原码、反码、补码、移码(六)
|
存储
[软考]之原码、反码、补码和移码
[软考]之原码、反码、补码和移码
128 0