C++中的补码公式与位域

C++中的补码公式与位域:

代码很简单就不多说:

补码公式:

#include <iostream>
using namespace std;

void operator_1(void);
void operator_2(void);
void operator_3(void);
int main(void) {

        /*
        -x = ~x+1 = ~(x-1)
        ~x = -x-1
        -(~x) = x+1
        ~(-x) = x-1

        x+y = x - ~y-1 = (x|y) + (x&y)
        x-y = x + ~y+1 = (x|~y) - (~x&y)
        x^y = (x|y) - (x&y)
        x|y = (x& ~y) + y
        x&y = (~x|y) - ~x

        x==y :  ~(x-y|y-x)
        x!=y :  x-y|y-x
        x<y  :  (x-y) ^ ((x^y) & ((x-y) ^x))
        x<=y :  (x|~y) & ((x^y) | ~(y-x))
        x<y  :  (~x&y) | ((~x|y) & (x-y))   //unsigned
        x<=y :  (~x|y) & ((x^y) | ~(y-x))   //unsigned

        */
        operator_1();
        operator_2();
        operator_3();
        return 0;
}
void operator_1(void) {
        int x = 1;
        cout << "-x = " << -x << "   ~x+1 = " << ~x + 1 << endl;
        cout << "~x = " << ~x << "   -x-1 = " << -x - 1 << endl;
        cout << "-(~x) = "<< -(~x) << "   x+1 = " << x + 1 << endl;
        cout << "-(~x) = "<< -(~x) << "   x-1 = " << -x -1 << endl;
}
void operator_2(void) {
        int x = 3, y = 5;
        cout << endl;
        cout << "x: " << x << "y: " << y << endl;
        cout << "x+y=" << x+y << "   x- ~y-1= " << x - ~y - 1
        << "  (x|y)+(x&y) = " << (x|y) + (x&y) << endl;
        cout << "x-y=" << x-y << "   x+ ~y+1= " << x + ~y + 1
        << "  (x|~y) - (~x&y) = " << (x|~y) - (~x|y) << endl;

        cout << "x^y=" << (x^y) << " (x|y) - (x&y)" << (x|y) - (x&y) << endl;
        cout << "x|y=" << (x|y) << " (x& ~y) + y = " << (x& ~y) + y << endl;
        cout << "x&y=" << (x&y) << " (~x|y) - ~x = " << (~x|y) - ~x << endl;
}
void operator_3(void) {
        int x = -3, y = -5;
        unsigned int x_t = -1, y_t = -5;
        cout << "x: " << x << "y: " << y << endl;
        cout << "x==y =" << (x==y) << "  ~(x-y|y-x) =" << ~(x-y|y-x) << endl;
        cout << "x!=y =" << (x!=y) << "  x-y|y-x =" << (x-y|y-x) << endl;
        cout << "x<y =" << (x<y) << "  (x-y) ^ ((x^y) & ((x-y)^x))=" << ((x-y) ^ ((x^y) & ((x-y)^x))) << endl;
        cout << "x<=y =" << (x<=y) << "  (x|~y) & ((x^y) |~ (y-x))=" << ((x|~y) & ((x^y) |~ (y-x))) << endl;
        cout << "unsigned: x<y =" << (x_t<y_t)
        << "  (~x&y) | ((~x|y) & (x-y))" << ((~x_t&y_t) | ((~x_t|y_t) & (x_t-y_t))) << endl;

        cout << "unsigned: x<=y =" << (x_t<=y_t)
        << " (~x|y) & ((x^y) | ~(y-x) =" << ((~x_t|y_t) & ((x_t^y_t) |~ (y_t-x_t))) << endl;

}

位域

#include <stdio.h>
typedef struct bs {
        int a:2;
        int b:1;
        int c:12;
        unsigned d:4

}bs;
struct bit_2 {
        unsigned a:2;
        unsigned :2;  //It can't use
        unsigned :0;  //NULL

        unsigned b:4;
        unsigned c:4;

};
int main(void) {
        bs bit;
        printf("sizeof(%d) \n",sizeof(struct bs));
        bit.a = 4;
        bit.b = 1;
        bit.c = 34235;
        printf("a: %d   b: %d  c: %d\n", bit.a, bit.b, bit.c);

        return 0;
}

原文地址:https://www.cnblogs.com/lyxf/p/12231472.html

时间: 2024-11-13 08:16:14

C++中的补码公式与位域的相关文章

魔兽世界中的一些公式

一.攻击力(Attack Power,简称AP)Warrior/Paladin:AP=角色等级*3+力量*2-20 Hunter/Rogue:AP=角色等级*2+力量+敏捷-20 Shaman:AP=角色等级*2+力量*2-20 Druid:AP=力量*2-20 Mage/Priest/Warlock:AP=力量-10 角色DPS=AP/14+武器DPS 单次攻击伤害(最小/最大)=攻击速度*AP/14+武器伤害(最小/最大)+技能附加伤害 二.防御力(Armor)1敏捷(Agilty)=2Ar

在Emacs中生成LaTeX公式

苹果系统下面有个LaTeXiT软件,可以方便地生成LaTeX公式,然后拖拽到别的程序中直接使用.在Windows下这方面的工具就比较少了.不过如果装有CTeX中文套装和Emacs的话,倒不妨自己做一个简易的版本. 思路很简单:开一个Emacs buffer,编辑好公式,执行自编的texify函数调用相关命令生成dvi文件.然后再根据这篇文章中说的方法,对其进行适当的裁剪,并一次生成多种图片格式,以供其他程序使用.该函数如下: (defun texify () (interactive) (let

word中添加Mathtype公式行间距改变问题

转载链接:http://blog.sciencenet.cn/home.php?mod=space&uid=471807&do=blog&id=616838 最近碰到在word文档中用mathtype插入公式后导致正文间距过大的问题,苦恼了很久,差点就要改用latex了,但最终找到了解决办法. 在网上找到的办法有: 1.在word中点击“文件”菜单下的“页面设置”项.在“文档网格”标签页中的“网格”一栏,勾选“无网格”项(如图).这样能很大程度上缓解行距不等的情况,然后再进行公式大

详解MathType中如何更改公式颜色

在MathType数学公式编辑器中可以通过更改公式颜色,起到美化.标注公式的效果.本教程将详解MathType中如何更改公式颜色. 点击菜单栏中的样式->格式->颜色,用户就可以根据自己的喜好选择想要的颜色. 更改字体颜色后的效果图: 如果默认的这几个颜色不够选择的话,还可以点击“其他”按钮,打开颜色库,点击需要的颜色后,点击“确定”按钮即可. 如果需要将某一颜色设为默认颜色,则需点击“编辑颜色菜单”按钮,设定好颜色后,点击“设为默认值”即可. 通过以上操作,即可完成在MathType数学公式

Java执行字符串中的运算公式

在实现执行字符串中的运算公式时,采用了如下所示的代码: public static String StringfinalResult (String original) { try { String temp = (String)jse.eval(original); return temp; } catch (Exception t) { return null; } } 调用该函数后控制台输出为null 应修改为如下所示的代码: public static String Stringfina

java中二进制反码补码的理解

7句真言 1,二进制最高位是符号位 0正数 1负数 2,正数的原码,反码,补码都一样 3负数的原码反码 补码 (符号位不变,其他的位数取反 0->1 1->0) 4 0的反码补码都是0 5java中没有无符号数,换句话说,java中的数都是有符号的 6计算机运算的时候,都是以补码的方式来运算的 7,负数的补码 = 他的反码+1

latex中如何引用公式

在使用latex编辑文章时,经常会需要引用公式.图表等等. 如果我们人为地对这些公式.图表进行编号1-2-3-4,然后在文章中使用Eq(1)-Eq(2)-Eq(3)-Eq(4)去引用这些公式,固然是可以的:但如果我们原来的公式或图表的顺序被打乱了,那么引用的编号也需要作相应的调整,这样改起来就会非常麻烦! 不只是在latex中,在MS word中也会遇到类似的问题,不过在word中可以通过交叉引用解决.latex解决方法更为简单,如下例所示. 定义方程 01 02 03 \begin{equat

Excel中常用的公式

Excel:添加或取消删除线:选中-右击-设置单元格格式-字体-选项"页面找到"特殊效果"模块,点击"删除线"选项前面的复选框,使其呈现"√"状态-OK   取消是相同的操作 Excel:把一列中的数据给替换掉 选中一列-Ctrl+h-输入要查找的内容-点击查找全部-在找到的单元格列表中,随便点击一个,然后按下组合键"ctrl+A"-切换到替换标签,在替换为后面的 框中输入你要替换的结果-点击全部替换 excel:把

PowerPoint 中插入 Latex 公式

做 PPT 用 Latex Beamer 毕竟还是太麻烦,Beamer 毕竟还是更适合学术性的,各种定义各种公式的那种,遇到要画各种图,插入各种图片,进行错综复杂的排版就比较棘手了. 最终还是 PowerPoint 更适合这类任务.然而它的公式编辑又太鸡肋,不美观倒在其次,编辑起来费劲才是最麻烦的.据说 Office 2016 已经支持 Latex 了,然而似乎不太好用. 于是试了一下一个叫 iguanaTex 的 PowerPoint 加载项,挺好用.但是用了一段时间后发现  \frac  这