内存中原码,反码,补码,查看数值范围,,或,异或,取反,左右移位操作
1.補碼,計算機二進制在內存中如何顯示的就是補碼
2.查看每種數據類型的范圍
如果想輸出無符號整型,使用的是UINT_MAX可以得到長度。
3.原碼,反碼,補碼
正數:原碼,反碼,補碼都是相同的
負數:(以-1為例)
原碼: 1000 0000 0000 0000? 00000000 0000 0001 -1的原碼
反碼: 1111 1111 1111 1111? 11111111 1111 1110 -1的反碼(符號位不變,其它位取反)
補碼: 1111 1111 1111 1111? 11111111 1111 1111 -1的補碼(符號位不變,反碼基礎上加1)
4、操作符
&與,或,異或,取反操作符
| 參數1 | 參數2 | 求&的結果 |
| 1 | 1 | 1 |
| 1 | 0 | 0 |
| 0 | 1 | 0 |
| 0 | 0 | 0 |
比如:(7&3)=3
與可以清除某些位數
|:或操作
| 參數1 | 參數2 | 求|的結果 |
| 1 | 1 | 1 |
| 1 | 0 | 1 |
| 0 | 1 | 1 |
| 0 | 0 | 0 |
^異或
| 參數1 | 參數2 | 求^的結果 |
| 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
<< 左移,值變成原來的2倍
>> 右移? 值變成原來的1/2
左移位效果
在上面的基礎上進行右移位的效果如下:
5、打印二進制文件
#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;//構建一個相與的數據
????????
???????? 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;//構建一個相與的數據
???????? if(num < 0)
???????? {
?????????????????? num= ~num + 1;//求原碼??
?????????????????? num= num | data;//設置符號位??
???????? }
?
???????? 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位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的内存中原码,反码,补码,查看数值范围,,或,异或,取反,左右移位操作的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 内存四域,变量声明和定义,寄存器,c内嵌
- 下一篇: 吾日三省吾身从哪三个方面反省自己用原文中