C语言中位运算求八进制数的补码下面是程序但是看不懂

#include<stdio.h> main() { unsigned short a,z; printf("please input an octal number:\n"); scanf("%o", &a); /*输入一个八进制数*/ z=a & 0100000; /*0100000的二进制形式为最高位为1,其余为0*/ if(z==0100000) /*如果a小于0*/ z=~a+1; /*取反加1*/ else z=a; printf("the result is %o:\n", z); /*将结果输出*/ }

第1个回答  2019-12-25
unsigned
short是2个字节,也就是16位
scanf("%o",
&a);在命令行窗口输入8进制数保存给变量a
0100000的二进制形式为最高位为1,其余为0,也就是说与其与运算之后,结果的二进制最高位为1则a为负数,
下面的判断就是分为正负数两种情况
if(z==0100000)

/*如果a小于0*/
z=~a+1;

/*取反加1*/
else
z=a;

printf("the
result
is
%o:\n",
z);

/*将结果输出*/
}

C语言中位运算求八进制数的补码下面是程序但是看不懂
short是2个字节,也就是16位 scanf("%o",&a);在命令行窗口输入8进制数保存给变量a 0100000的二进制形式为最高位为1,其余为0,也就是说与其与运算之后,结果的二进制最高位为1则a为负数,下面的判断就是分为正负数两种情况 if(z==0100000)\/*如果a小于0*\/ z=~a+1;\/*取反加1*\/ else z...

求数的补码 c语言中
简单的位运算就可以了 include <stdio.h> void printBin(int num){ int i,k=31;for(i=0;i<32;i++){ printf("%d",(num>>k)&1);\/\/移位并输出 k--;} printf("\\n");} int main(int argc, char* argv[]){ int num;printf("Please input a number, I will tell you what it...

关于C语言的基础问题。(位运算、补码)
补码表示有符号数时,第一位表示正负号,1为-,0为+,所以i是0xFFFFFF,全部为1,则i为负数,当其为负数时,值的求法是去掉符号位,剩下的取反+1,那么就是0+1=1,所以i的值是-1 要理解为什么不同应该先去看一下补码的编码规则,而不是看二进制的运算 进制之间的转换可以看看http:\/\/hi....

C语言写一函数:给出一个数的原码,得到该数的补码
0100000是八进制数。即二进制数:1000 0000 0000 0000。z=value&0100000;\/\/意义就是取value的最高位。if(z==0100000)\/\/如果最高位是1,即为负数,需要求补 z=~value+1;\/\/求补,即取反+1else z=value;

C语言中位运算符问题 这句话怎么解释啊
对于有符号数,最高位为符号位,>> 右移运算,移动的时候符号位会被同时移动。比如有符号数的-8,如果用8位二进制补码表示,就是二进制的 1111 1000,右移0位,也就是不移动,等于-8,就等于8除以1,也就是8除以2的0次方;右移1位:如果补1进来, 1111 1100 ,等于-4, 就等于8除以2...

C语言——位运算
本文将介绍C语言中的位运算,它允许程序员直接操作二进制位。二进制位,或“位”,仅包含0或1。在计算机中,数据以二进制形式表示,执行的指令亦是如此。计算机内部的数据以补码形式存储。这意味着,对于数字的二进制表示,最左侧的位(符号位)指示数字是正还是负。位运算包括:取反运算、左移运算、...

C语言进行位运算是不是都是补码形式进行的?
你说的补码运算,不是C语言的事情,是计算机自己的事(二进制运算)。在C语言中,各种计算方法和生活中的一样,没有什么补码,原码的。。在二进制计算中,我知道减法是要用补码来运算的,加法,位运算,逻辑运算都是原码直接计算。补码运算具体过程不清楚了。

C语言求原码的补码问题
八位原码,可代表带符号数-127~127。由此可知,-128 只有补码,没有原码。在八位补码中,0~127,是按照正数的原码来存放的。另外的 128~255,则是代表数字-128~-1。将 129~255 “取反加一”,即为-127~-1 原码。而 128,没有对应的原码。八位补码转成原码的程序如下:unsigned char ...

C语言,输出补码
求补码的函数可以参考下面的代码,我们知道,在内存中,正数的补码等于他本身,所以直接返回a。负数的补码正是它在内存中的存在形式,这是我们定义一个unsigned int型的数值去用它来赋值,取得的就是他的补码的二进制形式。为了验证,我另外编写了一个函数,用来输出二进制,请参考。unsigned int buma(...

4、设计一个函数,当给定一个整数后,能得到该数的补码(应考虑该整数是正...
1、输入一个简单的C语言程序:输入矩形的两条边,求矩形的面积。[分析与讨论]1、记下在调试过程中所发现的错误、系统给出的出错信息和对策。分析讨论对策成功或失败的原因。2、总结C程序的结构和书写规则。 实验二 数据类型、运算符和表达式[实验目的]1.熟练表达式的表示方法2.了解表达式的运行结果3.了解C语言中...

相似回答
大家正在搜