内存中原码,反码,补码,查看数值范围,,或,异或,取反,左右移位操作
1.補(bǔ)碼,計(jì)算機(jī)二進(jìn)制在內(nèi)存中如何顯示的就是補(bǔ)碼
2.查看每種數(shù)據(jù)類(lèi)型的范圍
如果想輸出無(wú)符號(hào)整型,使用的是UINT_MAX可以得到長(zhǎng)度。
3.原碼,反碼,補(bǔ)碼
正數(shù):原碼,反碼,補(bǔ)碼都是相同的
負(fù)數(shù):(以-1為例)
原碼: 1000 0000 0000 0000? 00000000 0000 0001 -1的原碼
反碼: 1111 1111 1111 1111? 11111111 1111 1110 -1的反碼(符號(hào)位不變,其它位取反)
補(bǔ)碼: 1111 1111 1111 1111? 11111111 1111 1111 -1的補(bǔ)碼(符號(hào)位不變,反碼基礎(chǔ)上加1)
4、操作符
&與,或,異或,取反操作符
| 參數(shù)1 | 參數(shù)2 | 求&的結(jié)果 |
| 1 | 1 | 1 |
| 1 | 0 | 0 |
| 0 | 1 | 0 |
| 0 | 0 | 0 |
比如:(7&3)=3
與可以清除某些位數(shù)
|:或操作
| 參數(shù)1 | 參數(shù)2 | 求|的結(jié)果 |
| 1 | 1 | 1 |
| 1 | 0 | 1 |
| 0 | 1 | 1 |
| 0 | 0 | 0 |
^異或
| 參數(shù)1 | 參數(shù)2 | 求^的結(jié)果 |
| 1 | 1 | 0 |
| 1 | 0 | 1 |
| 0 | 1 | 1 |
| 0 | 0 | 0 |
案例:
~取反操作符
1?? 取反得? 0
0?? 取反得? 1
unsigned char ch1 = 1;???? //0000 0001? 1
unsigned char ch2= ~ch1;?? //1111 1110?254
<< 左移,值變成原來(lái)的2倍
>> 右移? 值變成原來(lái)的1/2
左移位效果
在上面的基礎(chǔ)上進(jìn)行右移位的效果如下:
5、打印二進(jìn)制文件
#define?_CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
?
void main1()
{
???????? intnum;
???????? scanf("%d",&num);
?
???????? printf("num=%d,&num=%p\n",num,&num);
???????? int? data = 1 << 31;//構(gòu)建一個(gè)相與的數(shù)據(jù)
????????
???????? for(int i = 1; i <= 32; i++)
???????? {
?????????????????? inttemp = num&data;//求出首位相與
?
?????????????????? if(temp == 0)
?????????????????? {
??????????????????????????? putchar('0');
?????????????????? }
?????????????????? else
?????????????????? {
??????????????????????????? putchar('1');
?????????????????? }
??????????????????
?????????????????? num<<= 1;
?????????????????? if(i % 4 == 0)
?????????????????? {
??????????????????????????? printf("");
?????????????????? }
???????? }
???????? system("pause");
}
?
void main()
{
???????? intnum;
???????? scanf("%d",&num);
?
???????? printf("num=%d,&num=%p\n",num, &num);
???????? intdata = 1 << 31;//構(gòu)建一個(gè)相與的數(shù)據(jù)
???????? if(num < 0)
???????? {
?????????????????? num= ~num + 1;//求原碼??
?????????????????? num= num | data;//設(shè)置符號(hào)位??
???????? }
?
???????? for(int i = 1; i <= 32; i++)
???????? {
?????????????????? inttemp = num&data;//求出首位相與
?????????????????? if(temp == 0)
?????????????????? {
??????????????????????????? putchar('0');
?????????????????? }
?????????????????? else
?????????????????? {
??????????????????????????? putchar('1');
?????????????????? }
?
?????????????????? num<<= 1;
?????????????????? if(i % 4 == 0)
?????????????????? {
??????????????????????????? printf("");
?????????????????? }
???????? }
?
???????? system("pause");
}
與50位技術(shù)專(zhuān)家面對(duì)面20年技術(shù)見(jiàn)證,附贈(zèng)技術(shù)全景圖總結(jié)
以上是生活随笔為你收集整理的内存中原码,反码,补码,查看数值范围,,或,异或,取反,左右移位操作的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 内存四域,变量声明和定义,寄存器,c内嵌
- 下一篇: 吾日三省吾身从哪三个方面反省自己用原文中